您的位置:首页 > 理论基础 > 计算机网络

计算机网络——传输层协议

2018-02-04 01:43 246 查看
传输层的功能是分割并重新组装上层提供的数据流,为数据流提供端到端的传输服务。

传输层中两个有代表性的协议就是TCP和UDP协议。

TCP和UDP的区别

TCP是面向连接的、可靠的流协议。

UDP是不具有可靠的、无连接的数据报协议。

端口号

数据链路层的地址是MAC地址,IP协议中的地址是IP地址。那么传输层的地址是端口号,端口号用来识别同一台计算机中进行通信的不同应用程序。

常用应用程序的服务端端口号:

ftp:21 SSH:22

SMTP:25 HTTP:80

当传输层协议收到数据之后,会拆开首部,检查其中的目的端口,然后转发给相应端口的应用程序处理。

UDP

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。当应用程序发出数据,在数据前加入UDP首部,传给网络层。即时出现网络拥堵的情况下,UDP也无法进行流量控制等操作。无论数据包在中途丢弃还是延迟,UDP都不做管理。

但是UDP也有优点,简单高效。

首部格式



包长度:保存了UDP首部长度和数据长度之和。

校验和:通过得出伪首部,通过十六位的补码和得出校验和。

TCP

tcp协议是建立在不可靠的ip协议上的可靠性传输。所以需要考虑到数据丢失,损坏等问题。

提高可靠性

tcp通过序列号和确认应答提高数据的可靠性。

当发送一个数据,那么就会携带上一个序列号+数据长度,例如序列号seq为1,长度为100,那么收到数据的这一方会给一个受到的反馈,叫做ack,反馈为下一个是101,也就是ack:101。当发送方发出数据之后,就会等待ack的反馈,如果没有收到,那么就会重新发送数据。所以通过这种方式就完成了数据的可靠传输。

重发超时的确定

tcp在每次发包时都会计算往返时间及其偏差,将这个往返时间和偏差相加,重发超时时间就是比这稍微大一点的值。

首部格式



序列号:是指发送数据的位置,每发送一次数据就会累加一次该数据字节数的大小。初始值随机生成。

确认应答序列号:是指下一次应该受到的数据的序列号。

数据偏移:表示TCP所传输的数据部分应该从TCP包的哪个为开始计算,长度为四位,单位为四字节。

保留:以后扩展使用,长度4位

控制位:长度8位,每一位都是一个控制位。(上图中有误差)

从左到右分别是CWR、ECE、URG、ACK、PSH、RST、SYN、FIN

CWR和ECE置1代表通知对方,对方到这边网络有拥塞。

URG:置1时表示有紧急数据要处理

ACK:确认应答

PSH:置1表示收到的数据要立即传给上层协议,否则可以缓存

RST:置1表示强制断开连接

SYN:用于建立连接

FIN:用于断开连接

窗口大小:16位,用于确认应答信号所指位置开始能接收的数据大小

校验和:通过TCP伪首部进行补码和计算出校验和

紧急指针:只有URG为1时有效,表示本报文段中紧急数据的指针

选项:用于提高tcp传输性能

三次握手、四次挥手



TCP是个面向连接的协议,传输数据之前需要建立连接,结束后需要断开连接。

建立连接一般称为三次握手

一般服务器端处于监听状态LISTEN,而客户端处于CLOSED状态。

①客户端先向服务器建立连接,向服务端发送SYN报文段请求建立连接,序列号为x,然后客户端进入SYN_SENT状态

②接着服务端发出SYN+ACK报文段,序列号为y,确认序列号为x+1,SYN代表请求建立连接,ACK代表收到了之前的报文端。

③当客户端收到了SYN+ACK报文段,接着发出ACK确认,序列号为y+1。最终双方都进入ESTABLISHED建立状态。这样就完成了三次握手。

断开连接—四次挥手

TCP是个全双工的通信协议,数据传输都是双向的。所以关闭连接需要关闭从客户端到服务端的连接,还要关闭服务端到客户端的连接。

①客户端向服务器发送FIN的报文段,进入FIN_WAIT1状态。

②服务端收到FIN的报文段,发出ACK确认后进入CLOSE_WAIT状态,客户端收到ACK后进去FIN_WAIT状态。

③服务端发出FIN的报文段进入LAST_ACK状态。

④客户端收到FIN报文段后,发出ACK确认报文段后,进入TIME_WAIT状态。服务端收到ACK后就关闭连接。

TCP发送数据单位

TCP以段位单位发送数据,也可以称为最大消息长度MSS。最理想的情况下最大消息长度正好是IP中不会被分片处理的最大数据长度。MSS大小是在三次握手时确认的,两个端在请求连接时都会告诉对方自己的接口能够适应的MSS的大小,最终取最小值。

TCP滑动窗口控制

作用:提高传输速率,控制传输流量。

如果采用发一次数据就等待确认应答,那么通信性能就会非常低。

引入窗口后,无须等待应答就可以继续发送数据,当窗口大小为0后就无法发送数据。



例如上图所示,在建立连接时确认双方窗口大小,发送方会连续发送小于等于窗口大小的数据量,然后接收方也可以进行确认。这样大大提高了网络传输效率。

每台运行TCP协议的计算机有两个滑动窗口:一个用于数据发送,另一个用于数据接收。滑动窗口左端标志X的分组,是已经被接收端确认收到的分组。随着新的确认到来,窗口不断向右滑动。

重发控制

有了窗口控制,发送端有些确认应答没收到也不需要重发,收到ack,说明该确认序号之前的数据都收到了。如果接收端没有接收到数据,那么接收端发连续三次发送之前的去人应答,当发送端接收到三次重复的应答,那么就会重发丢失的数据包。这种机制比超时更加有效,在接收端重发应答时,发送端是还能继续发送数据的。

拥塞控制

进行拥塞控制的目的是防止在网络拥堵时发送大量数据导致网络瘫痪。

常见的拥塞控制的方法有:

慢启动、拥塞避免、快重传、快恢复

为了调节所要发数据的量,定义一个叫拥塞窗口的概念。在发送数据包时取拥塞窗口大小和接收方窗口大小的最小值进行发送数据。

慢启动:在不知道网络状况的情况下,拥塞窗口的初始值为1MSS,收到确认应答后拥塞窗口大小就增大一倍。如果超过一定的阈值ssthresh,则采用拥塞避免算法。

拥塞避免:不同于慢启动,拥塞避免是每经过一个往返时间RTT,拥塞窗口大小增加1。如果出现延迟,那么就说明出现网络拥挤,阈值ssthresh变成当前拥塞窗口大小cwnd的二分之一,然后cwnd改成1,执行慢启动算法。

快重传:当收到失序的报文立即发送重传确认,只要发送方收到连续三次的重传确认,那么就重传失序报文。然后把阈值ssthresh减少一半,预防网络堵塞。

快恢复:当收到连续三个ack, 执行cwnd = cwnd/2 ,sshthresh = cwnd ,使用拥塞避免算法。



1比特滑动窗口协议

所谓1比特,就是发送窗口与接收窗口的值都是1,由于发送方每次发完1帧的消息都要等待接收方返回的确认消息,所以也叫停等协议(stop-on-wait)

回退n帧协议:

当接收方检测出失序的信息帧后,要求发送方重发最后一个正确接收的帧之后的所有未被确认的帧;或者当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: