计网笔记(5)——传输层

传输层协议:

  • TCP:需要将要传输的文件分段传输,需要建立会话,可靠传输,流量控制。邮件、ftp传输使用TCP协议。
  • UDP:一个数据包就能完成数据通信,不需要分段,不需要建立会话,不可靠传输,不需要流量控制。域名解析、QQ聊天使用UDP协议。数据包广播、多播使用UDP协议。

TCP协议号:6
UDP协议号:17 (0x11)
ICMP协议号:1


端口号

端口 0-65535

  • 熟知端口 0-1023
  • 登记端口 1024-49151
  • 客户端端口 49152-65535

查看端口命令:netstat -an

常见应用层协议端口: http://tool.oschina.net/commons?type=7

计网笔记(5)——传输层_第1张图片

端口用16位端口号标识。端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。


传输层的功能

计网笔记(5)——传输层_第2张图片
传输层功能
  • 传输层为相互通信的应用进程之间提供了端到端的逻辑通信,而网络层是为主机之间提供逻辑通信。
  • 传输层还要对收到的报文进行差错检测。
  • 传输层提供面向连接(TCP需要建立会话)和无连接(UDP不需要建立会话)的服务。

UDP

UDP协议是User Datagram Protocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的C/S模式的网络应用都需要使用UDP协议。

特点:

  • 无连接,发送数据之前不需要建立连接。开销和发送之前的时间延迟较短。
  • 尽最大努力交付。(可以采取一定策略实现可靠传输)
  • 面向报文,UDP对应用程序交付的报文,添加UDP首部后直接交给IP层。不合并,不拆分。
  • 没有拥塞控制,网络拥塞不会使源主机发送率降低。
  • UDP支持一对一,一对多,多对一的交互通信
  • UDP首部开销较小,8字节(TCP为20字节、IP为20字节)
计网笔记(5)——传输层_第3张图片
UDP的首部格式

UDP校验和的计算:
1)把伪首部添加到UDP上;
2)计算初始时是需要将检验和字段添零的;
3)把所有位划分为16位(2字节)的字;
4)把所有16位的字相加,如果遇到进位,则将高于16字节的进位部分的值加到最低位上,举例,0xBB5E+0xFCED=0x1 B84B,则将1放到最低位,得到结果是0xB84C;
5)将所有字相加得到的结果应该为一个16位的数,将该数取反则可以得到检验和checksum。


TCP

传输控制协议TCP协议的特点

  • TCP是面向连接的传输层协议;
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);
  • TCP提供可靠交付的服务;
  • TCP提供全双工通信。
  • 面向字节流。

套接字
TCP连接的端点不是主机、不是主机的IP地址,不是应用进程,也不是传输层的协议端口。TCP连接的端点叫做套接字(socket)端口号拼接到IP地址即构成了套接字。

TCP首部

计网笔记(5)——传输层_第4张图片
TCP首部

TCP协议首部最少20个字节,包括以下的区域:

  • 源端口:16位的源端口。源端口和源IP地址的作用是标示报文的返回地址。
  • 目的端口:16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。
  • 序列号:占32位,一次TCP通信(建立到断开)过程中某一个传输方向上的字节流的每个字节的编号,它保证了TCP通信的有序性,解决网络包乱序的问题,由于有了这个编号,接收端可以根据这个序号进行确认,可以保证每个分段在原始数据包中的位置,初始序列号由自己定,而后绪的序列号由对端的ACK决定:SN_x = ACK_y (发送包的序列号=上一确认包的应答号)。
  • 应答号(确认号):占32位,接收方对发送来的TCP报文段的确认响应号,其值是收到的TCP报文段的序号+1,也是对端下一次发报文段过来的序号,期望对端以这个序号开始发送自己的分组。这样可以保证发送过来的报文是有序的,否则发送端不能确认之前的报文是否被收到,而要决定是否重传。
  • 数据偏移:占4位,记录数据域的地址偏移,数据偏移每+1代表4字节,所以最大可表示60字节偏移,即头部的选项域最大可以有40字节。
  • 标志:6位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。
    URG:紧急标志,优先处理此包。
    ACK:0时确认号无效,1时确认号有效。
    SYN:同步
  • 窗口:16位,用来表示想收到的每个TCP数据段的大小。
  • 校验位:16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值结果完全一样,从而证明数据的有效性。
  • 紧急指针:16位,指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。
  • 选项:长度不定,但长度必须以字节。如果 没有 选项就表示这个一字节的域等于0。
    填充:不定长,填充的内容必须为0,它是为了数学目的而存在。目的是确保空间的可预测性。保证包头的结合和数据的开始处偏移量能够被32整除,一般额外的零以保证TCP头是32位的整数倍。

TCP的可靠传输——停止等待协议

计网笔记(5)——传输层_第5张图片
停止等待协议
  • 无差错情况:
    A向B发送M1,B收到后发给A一个确认M1信号,A收到确认M1信号后发下一数据包M2.
  • 超时重传:
    A向B发送M1,B收到的数据错误丢弃或根本没收到,A等待比一个往返时间略长的时间后,仍没有收到B的M1确认信号,则A重发一次M1,继续等待M1确认信息。
计网笔记(5)——传输层_第6张图片
确认丢失和确认迟到
  • 确认丢失:
    B返回的M1确认信号丢失了,A超时重传M1,B收到重发的M1后把重复的M1丢弃,再次发送确认M1信号。
  • 确认迟到:
    B返回的M1确认信号迟到(传输路径等原因),A超时重发M1,等待到M1确认信号并发M2后,若再次收到的M1确认信号,A不做任何操作(不会第二次发送M2)

使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠通信。这种可靠传输协议称为自动重传请求ARQ(Automatic Repeat reQuest)。ARQ表明重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组,发送方自动重传即可。

停止等待协议的优点是简单,但缺点是信道利用率太低

计网笔记(5)——传输层_第7张图片
计网笔记(5)——传输层_第8张图片
信道利用率U

TD表示发数据包的时间,RTT表示往返时间,TA表示接收确认包的时间。RTT比较固定,TA值很小,因此提高TD可有效提高信道利用率。

流水线传输
发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率。

计网笔记(5)——传输层_第9张图片
流水线传输

滑动窗口协议:http://www.cnblogs.com/newwy/p/3238362.html
只能发送窗口内的数据,每接收到一个数据的确认信号,就把窗口移动一次,移除窗口的数据才可以在缓存中删除。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便超时重传使用。

以上是每次数据包都要确认一次,也可以累积确认( http://blog.csdn.net/goodluckwhh/article/details/10220999 ) 一般来说,如果发送方发了包1,包2,包3,包4;接受方成功收到包1,包2,包3。那么接受方可以发回一个确认包,序号为4(4表示期望下一个收到的包的序号;当然你约定好用3表示也可以),那么发送方就知道包1到包3都发送接收成功,必要时重发包4。一个确认包确认了累积到某一序号的所有包,而不是对每个序号都发确认包。

具体到TCP,它对字节编号。比如发送方发了包1,包2,包3;包1含字节0到10,包2含字节11到20,包3含字节21到30。接受方成功收到包1,包2。那么接受方发回一个包含确认序号21的包,发送方就知道字节0到20(包1,包2)都成功收到,必要时要重发的只需从字节21开始。

你可能感兴趣的:(计网笔记(5)——传输层)