网络层和运输层的区别:网络层是为主机之间提供逻辑通信,而运输层为应用程序直接提供端到端的逻辑通信;
UDP和TCP是计算机传输层中重要的协议,TCP是面向连接的,UDP是面向无连接的;
TCP/IP层中的运输层用一个16位的端口号来表示一个端口,端口号只有本地意义,是为了标志计算机应用层中的各个进程和运输层中交互之间的层间接口,不同的网络号之间的端口号是没有关联的;因此,两个计算机之间的进程要进行相互通信,就必须知道对方的IP地址(为了找到对方的计算机)和端口号(为了找到计算机中的进程),因特网上的通信采用客户端-服务器的方式,客户在发起通信请求时,必须先知道对方服务器的IP地址和端口号。
用户数据报协议只在IP报文上增加了一个复用、分用以及差错检测的功能。
1.UDP的特点
2.UDP报文
首部字段只有8个字节,包括源端口、目的端口、长度、检验和。12字节的伪首部是为了计算检验和临时添加的。
传输控制协议(TCP,TransmissionControlProtocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。
TCP:用户报文协议,面向连接,在传输数据之前必须先建立连接,数据传输结束之后释放连接,TCP不提供广播或多播服务。
1.TCP特点
2.TCP的连接
TCP连接的不是两个主机号,也不是端口号,而是套接字:socket=IP地址:端口号
3.TCP报文段首部格式
4.TCP三次握手
假设A为客户端,B为服务器端。
5.TCP四次挥手
以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论ACK,因为ACK在连接建立之后都为1。
四次挥手的原因客户端发送了FIN连接释放报文之后,服务器收到了这个报文,就进入了CLOSE-WAIT状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送FIN连接释放报文。
发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。
接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为{31,34,35},其中{31}按序到达,而{34,35}就不是,因此只对字节31进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。
2.TCP流量控制TCP上的流量控制就是通过滑动窗口实现,一般来说,都是希望发送方发送的数据越快越好,但是发送方发送的数据过快会导致接收方来不及接受,因此就需要控制发送方的流量,TCP上的流量控制主要是通过设置滑动窗口大小实现,接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送数据。
TCP中拥塞控制的主要算法:慢开始、拥塞避免、快重传、快恢复发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。为了便于讨论,做如下假设:
1.慢开始与拥塞避免发送的最初执行慢开始,令cwnd=1,发送方只能发送1个报文段;当收到确认后,将cwnd加倍,因此之后发送方能够发送的报文段数量为:2、4、8…注意到慢开始每个轮次都将cwnd加倍,这样会让cwnd增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。
设置一个慢开始门限ssthresh,当cwnd>=ssthresh时,进入拥塞避免,每个轮次只将cwnd加1。
如果出现了超时,则令ssthresh=cwnd/2,然后重新执行慢开始。
2.快重传与快恢复在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到M1和M2,此时收到M4,应当发送对M2的确认。
在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个M2,则M3丢失,立即重传M3。
在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令ssthresh=cwnd/2,cwnd=ssthresh,注意到此时直接进入拥塞避免。
慢开始和快恢复的快慢指的是cwnd的设定值,而不是cwnd的增长速率。慢开始cwnd设定为1,而快恢复cwnd设定为ssthresh。