接下来,总结传输层的两大协议UDP和TCP。服务器
一.UDP(用户数据报协议)网络
讲UDP之间,先了解两个概念:有链接和无链接。spa
有链接:通讯以前,通讯双方必须创建一条通道;3d
无链接:不须要创建通道,发送方只管发,接收方收不收获得不关心。指针
而UDP叫作无链接、不可靠的运输协议。除了提供进程到进程(而不是主机到主机)的通讯以外,就没给IP服务添加任何东西。此外,它还完成很是有限的差错检验。说完它的缺点,那它的优势呢?UDP是个很是简单的协议,只有最小的开销。不考虑可靠性,发送的消息又很短时,就能够用UDP!blog
这里又提到两个概念:进程到进程的通讯,主机到主机的通讯进程
进程到进程的通讯:IP协议将报文交付给目的计算机,这是一种不完整的交付。这个报文必须交到正确的进程。这就是UDP干的。
同步
完成进程到进程的通讯有好几种方法,最经常使用的就是经过客户--服务器范例(C/S)。互联网
在互联网中,主机是用IP来定义本身,而进程就须要用端口号来定义本身:熟知端口(0~1023);注册端口(1024~49151);动态端口(49152~65535)。常见的几个熟知端口7-->echo(把收到的数据回送到发送端);13-->daytime(返回日期和时间);69-->TFTP(简单文件传送协议)。方法
套接字:网络IP加端口号。
UDP有8个字节的固定首部,格式以下:
差错控制:当接收端使用检验和并检测出差错时,就悄悄的将这个用户数据报丢掉。
二.TCP(传输控制协议)
像UDP同样,TCP也是进程到进程的协议。所以,也使用端口号。与UDP不一样的是,TCP是面向连接的协议,两个TCP之间创建一条虚链接(不是物理链接)也是可靠的。此外,TCP在运输层使用流量控制和差错控制机制。格式以下:
控制位:
URG-->紧急指针字段值有效
ACK-->确认字段值有效
PSH-->推送数据
RST-->链接必须复位
SYN-->在链接创建时必须对序号进行同步
FIN-->终止链接
窗口值:这个字段定义对方必须维持的窗口值。注意到这个字段是16位长,所以窗口值的最大长度是65535字节。
接下来,看看TCP在整个通讯过程当中的时序:
从上图中咱们清楚的看出,在链接开始阶段,客户端发送了个一个SYN报文段,报文段中只有SYN标志位被置为1,用来同步序号,消耗一个序号。接下来服务器发送了一个SYN+ACK的报文段,同步本身的初始序号,以便向客户端发送字节。同时发出一个ACK确认报文,表面确认收到来自客户端的SYN报文,并指望客户端继续发送下一个序号。SYN+ACK,不携带数据,消耗一个序号。ACK若是不携带数据,就不消耗序号。
再来看链接关闭阶段的四次握手:从客户端到服务器的收据传送结束了,给服务器发送一个FIN报文段,链接进入半关闭,客户端进入FIN_WAIT状态。这时服务器仍然能够发送数据。当服务器已经把全部处理过的数据都处理完毕后,就发送一个FIN报文段,而且被客户发来的ACK予以确认。
TIME_WAIT:
收到第二个FIN,已发送ACK;等带2MSL超时。但是咱们为何要2MSL的时间进行TIME_WAIT呢?两个理由:1.若是最后一个ACK报文段丢失了,那么服务器TCP觉得它的FIN丢失了,若是客户端进入CLOSED状态,并在2MSL计时器超时就关闭了这条链接,那么客户端永远收不到FIN,服务器也就永远收到关闭的ACK。2.前一个链接中的重复报文有可能到达新的链接中,被解释为属于新链接的报文段,为了不这个问题,就设置为了2MSL的等待时间。