• 计算机网络笔记(谢希仁)


    前述:

    我这本书应用层之前的读了三四遍了,下面是简单的笔记,其实谢希仁老师这本书算是教材中不错的,比较全且介绍的人人很舒服也很全面,补充一些东西足够应付面试且扩展很多,如果时间不多建议以网络层应用层为主,前面的面试不怎么问【狗头】

    数据链路层:

    1. 封装成帧【 SOH+数据包+EOT】

    2. 差错检测 CRC循环检测--无比特差错 还有可靠传输 需解决帧丢失重复乱序 检验序列FCS

    3. 透明传输 数据包中的SOH和EOT前面加上ESC转义符

    点对点

    ppp协议需要的特点1.简单 通用 2.-4.封装成帧 差错检测 透明传输 5.支持多种网络层协议和物理链路6.自动检测连接状态7.最大传输单元MTU8.网络层地址写上9.数据压缩协商p88

    ppp帧:FAC+协议+ip数据包+FCS+F 1 1 1 2 <=1500字节 2 1

    出现类似FAC FCS时如何处理? 字节填充或零比特填充

    网卡:适配器--因为计算机总线与网络上传输的数据率不一样,需要网卡中的ROM、RAM缓存或存储,自己有处理器 除非帧检测正确需要告知网络层,也就是交给计算机处理 通俗的讲就是 网络层和数据链路层的关卡,并且其ROM存这计算机的硬件地址,ip则存在计算机中

    广播:

    局域网:网络为一个单位拥有,地理范围和主机数目有限 1.可以广播 2.易于系统扩展和演变 3.提高了系统可靠性 可用性 有星形 环形 总线网之分,局域网的工作范围包括物理和数据链路层 信道的划分有静态动态之分 静态划分信道在物理层的复用讲过 就是 时分频分波分码分复用 动态接入有随机接入:所有用户可随机发信息 但要进行碰撞检测 受控接入:按控制采用轮询和探询

    以太网(施乐公司Xerox):尽最大努力交付(不可靠) 随机接入

    CSMA/CD协议:以太网用来解决传输中确定谁占用通讯资源的协议 载波监听多点切入/碰撞检测 协议 同一个屋子在t时只能有一个人说话,否则冲突 曼彻斯特编码 多点接入 以太网是广播形式 多个点都要检测 载波监听 不停监听 碰撞检测 边发送边监听 通过截断二进制指数退避选择重传时间 以争用期为基础 51.2us

    以太网的MAC层 在局域网中 硬件地址又叫 物理地址或MAC地址(用于MAC帧) 题外话 计算机系统设计中 标识系统十分重要 地址就是标识符,“名字指出我们要找的那个资源,而地址告诉我们他在哪”

    每个机器都有一个48位(但是类似ip,分层划用 到用户就只有几位可以用)唯一的物理地址(注意不是地理上的,你把笔记本换个地方 mac还是那个mac 换个网卡才会换mac) 分为 单播帧 广播帧 多播帧还有混杂模式 hack

    以太网MAC帧格式

    同步码+帧定界 | 目的地址 源地址 类型 数据(ip数据报) FCS 8字节 | 6 6 2 46-1500 4 前面八字节为了时钟同步 后面的mac帧一共64-1500 46=64-首尾6 6 2 4一共16字节

    扩展的以太网 分别在物理层或链路层扩展 物理层:利用转发器 集线器 用光纤连接解调器完成光电转换 数据链路层:最初利用网桥 后来 交换式集线器(二层交换机 以太网交换机)实质是多借口网桥 使得多对主机同时通信,具有存储器还可以在繁忙时暂存帧,内部有帧交换表 可以自学习建立表 有了二层交换机后 集线器就少很多了 虽然性能好 但他并不贵 10个接口的可以让10mbit/s的带宽变成100

    到了后来 因总线网效率太低 都改为星形了,CSMA自然也废除了,但还叫以太网,因为mac帧仍在沿用

    虚拟局域网VLAN:阻止广播风暴,因为不同的VLAN不会跨域广播

    高速以太网

    网络层:

    IP ICMP ARP 构造超网 划分子网 路由选择协议 IPV6 IP多播 VPN 大致结构 先介绍网络层提供的两种不同服务,然后网络协议IP,再接着网际控制报文协议ICMP, IPv6 多播 VPN NAT

    关于网络层该不该提供可靠传输 还是到运输层再提供 设计思路:一种崭新的设计思路,由于电信网的端到端主机是电话,功能简单没有处理能力,提供面向连接的电话网无疑是合适的,而对电脑来说就完全没必要了 网络层只向上提供简单灵活、无连接的、尽最大努力交付的数据报服务

    与IP协议配套使用的 地址解析协议ARP 网际控制报文协议ICMP 网际组管理协议IGMP

    应用层 HTTP FTP SMTP 运输层 TCP UDP 网络层 ICMP IGMP

    ip ARP 网络接口层 各种接口

    ip的编址方法三个历史阶段 1.分类 {网络号,主机号} 网络号唯一 32位 A【0 网络号8位 | 24主机号】 B【10 网络号16 | 16主机号】 C【110 网络号24 | 8主机号】 D【1110 多播地址】 E【1111 保留今后使用】 A类网络号可用126=128-2 一个全0表示‘本网络’ 127环回测试 就是发给自己处理 所以网络上不会出现A类127网络号 主机号2^24-2 全0表示本主机 全1本网络号上所有主机 整个IP空间 2^32 A占了近2^24*2^7 2^31一半 B占了25% 但网络号128.0.0.0不可指派 所以2^14-1 主机2^16-2 C 192.0.0.0不可指派 主机2 8 -1 12.5% A 1-126 B 128.1-191.255 C192.0.1-223.255.255 主机可以属于不同网络 有不同的IP

    2.划分子网 3.构造超网 无分类编址

    ARP:A找B的硬件地址 高速缓存查找 找不到局域网广播我是A我的硬件地址是A1我要找IP地址为B的主机硬件地址 再找不到利用路由器转发表到其他局域网找 找到后两边都更新 写入高速缓存 并设置失效时间以应对更改硬件地址的情况p137 138

    导出一个问题 既然有 Ip还要ARP和硬件地址干嘛,这是因为唯一表示硬件的硬件地址可以区分出世界上存在的庞杂的异构网络,也就是硬件地址才标识网络层以下如何找对应主机,IP只是虚拟逻辑地址用于分发查找

    IP数据报 【首部 数据部分】 0 4 8 16 19 24 31 【版本 | 首部长度 | 区分服务 | 总长度 标识 | 标志 | 片偏移 生存时间 | 协议 | 首部检验和 源地址 目的地址 可选字段(长度可变) |填充】 数据部分

    p138

    划分子网和构造超网

    1.IP地址空间利用率低,有的单位伸到B类 却远没有用满

    2.给每个物理网络一个网络好使得路由表太大

    3.俩级IP不够灵活

    为解决上述问题1985年 IP又增加了子网号字段,子网对本网络外不可见,使得两级IP变成三级IP

    子网掩码:因为从IP来看 是无法看出网络是否划分子网的,所以采用子网掩码将网络号和子网号都屏蔽掉,只剩下主机号,使得路由器可以成功转发到对于主机

    但是子网掩码只是缓解了ip不足的问题,所以又提出了构造超网和ipv6

    构造超网采用无分类域间路由选择CIDR

    1. CIDR消除了传统ABC类和划分子网的概念,使用网络前缀来划分,于是IP又回到了两极划分 IP地址{<网络前缀>,<主机号>}采用斜线计法

    2. CIDR把网络前缀相同的连续IP地址作为一个CIDR地址块

    128.14.35.7/20 /后面就是掩码的1个数,意思是这个IP地址是128.14.35.7前20位是网络前缀,后12都可用作主机号

    {<网络号>,<子网号>,<主机号>}

    网际控制报文协议ICMP:为了更有效的转发IP数据包和提高交付成功的机会 ICMP看起来像是更接近运输层的协议,但其实ICMP报文是装在IP数据报文中的,其实ICMP就是IP数据包的数据部分p157

    ICMP报文分两种,即ICMP差错报告报文和ICMP询问报文 类型由ICMP报文的前4个字节决定 【类型 | 代码 |检验和】

    改变路由:出于效率考虑,主机并不会定期和所有相邻路由器交换路由表,而是直接发送给一个知道这信息的默认路由器,默认路由器发现主机A通过路由器R发送更好,就会告诉A一个改变路由报文

    以下几种情况不会发送差错报告报文:

    1. 对ICMP差错报告报文不在发送ICMP差错报文

    2. 第一个分片的所有后续数据片不发送

    3. 具有多播地址或特殊地址的数据报不发送

    ICMP的应用:

    1. ping 用来测试两台主机之间的连通性,ping使用了icmp的会送予会送回答报文,是一个典型的应用层直接使用网络层的例子

     

    路由选择协议

    因需求分为内部网关协议IGP和外部网关协议EGP

    内部就是一个自治系统内采用的路由选择协议也叫域内路由选择,外部叫域间路由选择

    内部网关协议RIP:一种分布式的基于距离向量的选择协议,他要求网络中的路由器维护一个他自己到其他每个目的为了的距离向量,距离也称为“跳数”,条数最多15,等于16时RIP认为其不可达,所以RIP适用于小型网络

    RIP的特点

    1. 优先选择低跳数的路由,即使另一条是个更高速的网络

    2. 和相邻路由器交换信息

    3. 交换全部信息

    4. 固定时间间隔交换

    最开始的时候大家的路由表是空的,但这种看似你需要我我需要你的情况经过递归收敛后,各自的信息都得到了完善

     

    IPv6 由于网络规模较大 ipv6的消耗也要大很多,所以采用v4向v6过渡的方式使用ip,对于v6在现有网络的传播有两种解决方案

    1. 使用双协议栈,有双协议栈的主机利用DNS查询ip是v6还是v4

    2. 隧道技术,ipv6转换成v4再处理

     

    IP多播:例如100个主机向一个视频服务器请求同一个视频,服务器采用多播的方式只用向下传输一个副本,多播路由器会自动复制向下传输,大大节省网络资源,而我们所说的D类224~240-1就是多播专用IP,显然D类地址只用于源地址也就是服务器

    现实中一般用的是硬件多播,也就是使得mac地址与IP多播地址一一对应,mac第一个字节的最后一位为1表示多播硬件地址,要一一对应舍弃48的前12剩下32位,而mac分配机构只有23位能用于多播,D类前四位1110固定,省28,前5个不用,让ip和mac后23位唯一对应

    网际组管理协议IGMP 当多播时,有的路由器需要接受并向下分发,而有的多播路由器下的主机端口没有参与多播组则不需要,如何让路由器知道下属端口参与多播组与否就用到了IGMP,注意IGMP是本地管理,不对整个互联网多播组进行管理

    VPN 虚拟专用网,许多机构对网络的需求是内部之间通信远大于外部通信,完全可以使用已有的ip ABC规划出一批IP用于一些组织的VPN专用网,专用网可以自行分配IP给主机,但这个IP不允许在VPN之外运行,以免产生二义性 网络地址转换NAT 专用网需要向外界联网时用NAT协议向NAT服务器要一个与外部通信的IP

    运输层

    UDP TCP 停止等待协议 ARQ协议 滑动窗口 流量控制 拥塞控制机制 IP只能交付到主机,也就是网络层,也因为主机上的进程不止一个 运输层还涉及复用分用,复用就是大家都用统一的运输层协议从网络层接受数据报,分用是剥去报文首部可以正确交付不同的进程p214

    运输层向高层用户屏蔽了下面网络的细节,看起来好像是两个进程间有一条端到端的逻辑通信信道,当运输层采用面向连接的TCP时,尽管下面的网络不可靠,但TCP的功能使得这条信道相当于全双工的可靠信道,而采用UDP,这条信道仍是不可靠信道 p216 使用udp和tcp的应用协议 tcp和udp把报文交到合适的目的端口并负责将其交付目的进程,而端口号就类似一个小区里的不同蜂巢

    端口号分为 服务器端口号 0-1023 FTP TELNET SMTP DNS TFTP HTTP SNMP HTTPS 21 23 25 53 69 80 161 443 动态端口号1024-49151 客户端口号49152-65535 短暂端口号

    用户数据报协议UDP:只在IP的数据包服务上加了一点功能 复用分用、差错检测 特点:1. 无连接的 发送数据之前不需要建立连接

    1. UDP尽最大努力交付 不保证可靠交付,所以无需许多参数维持状态表

    2. UDP是面向报文的,也就是应用层交下来的报文只是简单的添加首部,既不拆分也不合并,直接交到网络层,所以使用UDP的报文长度要合适

    3. UDP没有拥塞控制,所以一些要求尽量一直连着 高峰时丢失一些数据也没关系的应用常采用UDP 如IP电话 实时视频会议

    4. 支持一对一 、一对多、 多对一交互通信

    5. 首部开销小只有8个字节 TCP20个

      首部 【源端口 目的端口 长度 检验和 】 各2字节 源端口在不需要对方回信时可以是全0 伪首部12字节 【4源ip | 4目的ip | 1 0 |1 17 |2UDP长度】

    如果接收方UDP发现报文目的端口不对 则丢弃并用网际控制报文协议ICMP返回‘端口不可达’差错报文,虽然UDP要用到端口号,但他无连接,并不需要套接字

    UDP检验和的计算需要伪首部

    传输控制协议TCP

    特点:

    1. 面向连接 应用程序使用TCP之前先建立TCP连接,传送完毕后,释放TCP连接

    2. 只能一对一

    3. 提供可靠交付 数据无比特差错 不丢失 不重复 按次序到达

    4. 全双工通信 双方都有发送缓存和接收缓存

    TCP连接的两端是套接字 socket IP地址:端口号 每一条TCP连接唯一的被两个端点确定 {socket1,socket2}

    停止等待协议: B收到A的分组,检测出错就丢弃,A超时重传,这叫自动重传请求ARQ,当A重传后 B仍要发送确认 但对于B发送的重复确认或迟到确认直接丢弃,但此方法信道利用率低

    流水线式传输:连续ARQ协议和滑动窗口协议 连续ARQ:维持一个发送窗口 这个窗口的分组可以连续发出而不需要对方确认 接收方采用累计确认的方式,收到几个后对按序到达的最后一个发送确认

    TCP报文段首部格式,首部二十字节固定,4N可变部分 源端口 | 目的端口 【序号】 【确认号】 【数据偏移|保留|URG|ACK|PSH|RST|SYN|FIN | 窗口 【校验和|紧急指针】 【长度可变|填充】 1.源端口目的端口 各2字节 实现分用 2.序号 4字节 0-2^32-1 4GB 表示第一个字节的序号 TCP是面向字节流的 每一个字节都要按顺序编号 3.确认号ack 4字节 期望收到对方下一个报文段的第一个数据字节序号 若确认号为N,则表明N-1位置的数据都正确收到 4.数据偏移 4位 实际上是首部长度 最大值是60字节 所以首部最长60字节 5.保留 6.紧急URG 当URG=1时 表明紧急指针字段有效,他告诉系统此报文段中有紧急数据应该尽快传输,例如远程ctrl c的传输 7.确认ACK 仅ACK=1时 确认号字段有效,TCP规定 连接建立后所以报文段都要把ACK置成1 8.推送PSH,类似紧急指针 不过PSH为1时接收方应该不管缓存有没有收满都传入应用层尽快处理 9.复位RST RST=1表示TCP连接出现严重错误,必须释放连接或重连,还可以用来拒绝一个非法报文段或拒绝打开连接 10.同步SYN 用来同步序号 SYN=1 ACK=0时表明这是一个连接请求报文段,对方同意则应使得SYN=1 ACK=1 11.终止FIN 用来释放一个链接 FIN=1 表示传输完毕释放连接 12.窗口 2字节 0-2^16-1 指定的是发送一方的接收窗口,限制对方回应数据数据的大小 13.校验和 2字节 检验首部和数据 要在TCP前面加上12字节伪首部 14.紧急指针 2字节指出紧急数据的末尾 15.选项 最长40字节 里面包时间戳 SACK等字段 时间戳可以准确计算RTT

    TCP可靠传输的实现

    以字节为单位的滑动窗口

    先讨论发送窗口,因为发送总是按序的 所以比较简单 一个发送窗口需要p1 p2 p3三个指针 p232 p3-p1=发送窗口 p2-p1=已发送但没有确认的字节数 p3-p2=允许发送但尚未发送的字节数 又叫可用窗口 p1之前是确定的 p3之后是不允许的 B的接收窗口就不一样了,因为不一定按序

    现在假如发送窗口发送几个字节,但是接收窗口只收到了后几个没有收到确认号需要的那个,那他仍然会回复ack=之前那个确认号,直到我们收到为止,回复收到,发送窗口继续向前移动

    p234 书本224 窗口这一段很重要 最好复习多看几遍

    现在假如发送窗口p2指到p3了 也就是发送窗口用完了但一直没有收到确认,过一段时间发送方会重新发送,直到收到确认

    TCP的流量控制

    一般我们总认为数据传的越快越好,但由于发送方总是可以按序发送,接收方处理相对麻烦,如果来不及接受会导致数据丢失,所以有了流量控制 而利用滑动窗口机制就可以方便的实现流量控制p237

    一种特殊情况 B发送了零窗口后不久B又突然有了一些缓存空间,于是发送rwnd=400的报文段,但这个报文丢失了,A一直等着拥堵的B发出腾出空间的报文段,而B也一直等着A的回应,这个死锁由请求一方打破,A可以设置一个持续计时器,收到0窗口时开始计时,每隔一段时间发送探测报文段,B收到就回应自己的窗口大小,这样就不会产生死锁了

    TCP的拥塞控制

    在某段时间内对网络中每一资源的需求超过了其可提供范围,网络性能变坏,这种情况叫拥塞,拥塞控制与流量控制的区别是,快速扩张是防止过多的数据注入到网络中,防止路由器或链路过载,是一个全局性的过程,设计所有主机和路由器 相反我们在讲流量控制时很明显是点对点的通信量控制,是一个端到端的问题,一个简单的例子,某光纤网带宽1000Gbit/s,即使一个大型计算机想以1Gbit/s传输,他并不太需要考虑整个网络的事情,但他却要充分考虑个人电脑能否接受住他的传输,而如果是1000个主机向中心大型服务器发送,则需要考虑拥塞控制p241

    拥塞控制的四种算法:慢开始 拥塞避免 快重传 快恢复

    1.慢开始和拥塞避免 这是基于窗口的拥塞控制,发送方维持一个叫做拥塞窗口cwnd的状态变量来控制发送窗口大小 原则从cwnd=1开始每次翻倍,判断有没有拥塞的标准就是是否发生超时,出现则减少cwnd,每轮更新cwnd发送的分组数变多,RTT也相应更新,为了防止指数增长某个轮次直接引起拥塞,应该设置慢开始门限ssthresh,cwnd=ssthresh后开始拥塞避免,cwnd每经过一个RTT只加1,碰到超时cwnd重置为1 p244(当然了上述讨论的单位都是报文段,实际上应该是字节数)

    缺点:有时发生丢失不一定是拥塞,所以会错误的把cwnd置1

    2.快重传 快重传要求接收方不要采用捎带回复(接收方为了方便会推迟0.5s以内等到自己发送报文段时顺便把确认信息传回A),而是立即回复。而快重传判断丢失的方法比较特殊,B收到的数据无论次序都会立马回复,所以如果A发M2M3M4M5,M3丢失了,B会一直回复对M2的确认,A重复确认三次M2判断出现错误,立即快重传M3,这是采用快恢复,也就是cwnd/2,ssthresh/2并开始执行用拥塞避免算法

    拥塞避免成为加法增大AI,快恢复叫乘法减少MD 合在一起熬AIMD算法

    TCP的运输连接管理:包括连接建立 数据传输 连接释放

    TCP建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段 p249

    (记住状态SYN-SENT这些)

    第一次客户主动打开连接,建立传输控制模块TCB 在准备建立连接时向B发送SYN=1 ACK=0 seq=x的SYN同步报文段 TCP规定此报文段不传输数据但消耗一个序号,TCP客户进程进入SYN-SENT(同步已发送状态)

    B收到后如果同意建立连接,向A发送确认,将SYN ACK都置1,选一个自己的序号例如seq=y,这个数据报同样占一个序号,所以A收到后ack=y+1,确认号ack=x+1 因为SYN占一个序号,B也进入SYN-SENT

    A收到B的确认后还要向B给出确认。ACK置为1,ack=y+1,seq=x+1而这个ACK报文段带或者不带数据都可 这里假设不带 B收到后应该给确认号ack还是x+1,这时对于A来说TCP已经建立,进入ESTABLISHED已建立连接状态 ,A向B发出这个报文段

    B收到A的确认 也进入已建立连接状态 经过了三次握手,当然B在给A确认时可以分两次发送确认,一个确认报文段(ACK=1,ack=x+1)再发同步报文段(SYN=1,seq=y),这称为四报文握手

    A为什么收到B的确认还要再给B发A的确认,这是为了处理一种特殊情况 A之前的无效连接请求如果是丢失了,不会对B有影响,但如果只是在某个节点耽误了,此时到了B,A的超时重传早已连接上了,如果只是握手两次,B会认为这个失效的请求是新一次请求,于是又给A发确认,AB之间又要白白消耗资源,而采取三报文握手,A收到这个B的无效确认能通过seq判断出来,所以A不会回应B A的确认,这个非法连接也就不会建立

    TCP的连接释放

    数据传输结束后双发都可释放连接,现在AB都处于已连接状态,A向B发送连接释放报文段FIN=1 seq=u,u是最后一个数据字节+1,此报文段不带数据也会消耗一个序号,并停止传输数据,主动关闭TCP连接,进入终止等待1状态

    B收到FIN后发出确认,ack=u+1,给出seq=v 类似u,B进入关闭等待状态,此时B通知应用层进程,A到B释放,TCP处于半关闭状态,此时B要发送数据A仍要接受,但A不会向B发送数据,也就是B-》A方向未关闭

    A收到B的确认后进入终止等待状态2,等待B也释放连接的FIN报文段

    B穿了一些数据后决定关闭,通知TCP释放连接 发送FIN=1 而B现在的序号可能是w,B重复上次的确认号ack=u+1 B进入最后确认状态 等待A的确认

    A收到B的FIN后必须发出确认,确认报文段中ACK置1 确认号ack=w+1,自己的序号seq=u+1,进入时间等待状态,然后经过时间等待计时器设置的2MSL后,A才进入closed状态,MSL叫做最长报文段寿命 建议2分钟,所以发送后过4min才会关闭,撤销相应的控制模块TCB

    设置2MSL的原因是1.保证A的ACK确认报文段到达B,B收不到会超时重传FIN+ACK,而A因为有两个MSL,所以一定会收到这个重传,并重新启动计时器 2.可以保证此次连接的报文段消失在网络中,防止出现TCP连接时的无效连接请求

    所以TCP的释放是四报文握手

    服务器还会有保活计时器

    p252TCP的有限状态机

    应用层

    通过位于不同主机中的多个应用进程之间的通信和协同工作来完成不同网络应用的通信 1.应用进程交换的报文类型 如请求报文和响应报文 2.各种报文类型的语法,如报文中的各个字段及其详细描述 3.字段的予以,及包含在字段中的信息的含义 4.进程何时、如何发送报文 以及对报文如何响应

    域名系统DNS

    是互联网使用的命名系统,用来便于把主机名转换为IP地址 用户在互联网上与某台主机通信时显然要知道对方的IP,但无论是二进制还是十进制都不易记住,应用层为了便于记忆,还会为主机提供主机名字

    至于为什么通信时使用IP而不是硬件地址、主机名 有一个共同的原因就是只有IP是定长32位(IPv6128位),处理转换算法简单,一旦涉及不是IP的地址处理 一般主机无法转换

    后来 域名系统DNS被设计为分布式数据库系统,采用客户机模式 大多数名字在本地解析 少数需要上传到根服务器查询,单个客户机出问题影响也不大

    DNS使用过程:用户把DNS请求报文以UDP数据报形式发给本地域名服务器,本地查到ip后返回回答报文,若查不到,此域名服务器又成为DNS中的一个客户继续查询,主机向本地域名服务器查询采用递归查询,也就是即使你没有查到,你也要继续向其他服务器查询帮我完成这件事,而本地域名服务器向根域名服务器查询时采用迭代查询,一个一个询问不同服务器,不会委托给上级服务器 迭代路线(根告诉本地区顶级查,顶级找不到又告诉根区权限域名服务器查)域名服务器一般都有高速缓存

    域名结构 mail.cctv.com 三级 .二级 . 顶级域名 DNS规定的三个标号都不得超过63字符,总长不超过255字符 不区分大小写 cctv和CCTV是一样的,标点字符只能用连接字符‘-’

    顶级域名分为三大类 国家/通用/基础通用域名 还有公司机构申请的新顶级域名

    文件传送协议FTP

    允许客户指明文件类型和格式(如编码信息ascii)存取权限,屏蔽了计算机系统细节,FTP基于TCP 而简单文件传送协议TFTP则使用UDP

    为什么需要FTP:两台主机在网络上传送文件看起来很简单,但不同的文件系统有几百种,经常遇到 1.计算机存储数据格式不同 2.目录结构 和 命名规定不同 3.对于文件的操作命令不同

    但FTP也有不适用的地方 比如若A只是想在B的一个大文件末尾添加信息,则需要传过来-添加-再传回去。更好的方法是网络文件系统NFS,NFS允许进程打开远地文件并读写

    TFTP的优点1.文件需要多个计算机下载时2.TFTP代码占内存少,对于小型设备很有用

    TELNET:远程终端协议 TCP远程登陆模拟本机鼠标操作另一台主机并显示反馈

    万维网www

    www提供一个大规模的联机的信息(文档html)储存所简称Web,使得互联网上的一个站点可以方便链接其他站点,www是一个分布式超媒体系统,很显然www是一个超文本系统的扩充,一个超文本可以包含分布在世界各地的站点,而www则方便了超文本对普通用户的需求,www不会对下属的连接信息进行管理,所以链接不存在是时有发生的

    浏览器就是在用户主机上工作的万维网客户程序,他向服务器发出请求,服务器返回客户需要的万维网文档,浏览器则负责显示这个文档,叫做页面

    所以www必须解决几个问题 1.如何标记整个互联网的www文档 2.用什么协议实现不同链接 3.统一解析超文本 4.怎么让用户方便找到所需信息 对于第一个问题 www使用统一资源定位符URL来标记文档 第二个则使用超文本传送协议HTTP,3.使用HTML标记语言4.搜索引擎

    URL:<协议>://<主机>:<端口>/<路径> URL使得互联网所有资源得以唯一定位,相当于文件系统在网络上的拓展,其实<协议>里一般就是http(当然现在还有https)和FTP 当在搜索窗口中写URL时,协议会自动省略,搜索引擎还会根据前缀树把你可能访问的网站在下面显示

    使用http的URL http一般使用80端口,也可省略,再省略路径就可访问主页,主机当然就是主机域名了

    超文本传输协议HTTP

    http是面向事务的,不仅完成超文本跳转传送,而且也传送任何可以从互联网得到的信息如文本,超文本,声音图像等

    每个万维网网点都有服务器进程,他会不断监听TCP的端口80,以便发现十分有浏览器对他发起请求,然后检测这个请求,发送文档,释放TCP连接,当然了,服务器和浏览器之间的请求响应交互的规则格式都是HTTP规定的,request respons

    用户可以通过浏览器地址窗口或点击页面访问服务器 HTTP本身是无连接且无状态的,虽然建立在TCP上,但TCP只有获取文档使用,建立HTTP连接之前都不需要可靠连接,无状态则是指访问过的用户,HTTP不会记住

    客户利用HTTP1.0请求并接受完报文的时间 发起tcpRTT 收到HTTP报文到http报文过来又一个RTT,再加上接受报文时间 缺点:每次链接都要花费2次RTT+接受时间 HTTP1.1则采用持续连接,发送响应后一段时间仍保持这条连接 具体采用非流水线或流水线工作方式 非流水线只能客户收到上一个response才会发下一个请求,相比1.0节省一个RTT,但还是比较慢 流水线则只需开始时一个RTT建立连接

    代理服务器p280 又叫 万维网高速缓存,会存放最近使用的请求和响应,若发现请求在缓存中,则直接返回这个响应

    Http报文结构 p281

    简单邮件传输协议SMTP 通用邮件扩充MIME 一个电子邮件系统应该有三个主要部分:用户代理、邮件服务器、邮件发送协议(SMTP)和邮件读取协议(POP3) 图p295

  • 相关阅读:
    沙盒中Documents、Library和tmp的用处 iOS
    LeetCode二叉树的前序遍历、中序遍历、后序遍历、层序遍历、最大深度Swift
    LeetCode判断一个单向链表是否有环?
    C#字符串处理
    【源码分享】十套C#管理系统程序源码
    【源码分享XY01】C#学生管理系统
    HL7的简单介绍
    【源码分享XY06】C#MVC+Sqlserver员工信息管理系统
    【源码分享XY04】php+MySQL开发的图书管理系统
    js将数值转为个十百千万显示
  • 原文地址:https://www.cnblogs.com/handso/p/13729500.html
Copyright © 2020-2023  润新知