1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 运输层协议TCP与网络编程

运输层协议TCP与网络编程

时间:2019-09-01 04:29:03

相关推荐

运输层协议TCP与网络编程

运输层协议TCP与网络编程

TCP

1.TCP报文段结构

应用进程通过套接字传递数据流,TCP将这些数据引导到该连接的发送缓存(send buffer),发送缓存是三次握手期间设置的,还有接收缓存(resv buffer)。TCP会是不是从其中取出一块数据进行发送。该数据块的大小受限于最大报文段长度MSS,MSS由本地发送最大的链路层帧长度(MTU)控制。一般MTU:1500字节,MSS:1460字节。

TCP连接的组成:缓存,套接字

2.连接的建立

TCP只在端系统中运行,是一条逻辑连接。对于中间网络元素(路由器和链路层交换机)看见的只是数据报。

C/S模型中:

服务器进程<------>协议栈--------------------------------协议栈<------>客户端进程

TCP是全双工服务。建立连接的时候,由一端发出SYN请求。比方在客户端,就是执行connect()函数时,协议栈发送该数据报,称为第一次握手。对端协议栈接收到到该数据报,会记录下对端的五元组信息,将其封装成一个节点放在半连接队列中。并且返回一个SYN数据报,称为第二次握手。客户端的协议栈接收到数据报后会发生第三个报文进行响应,即第三次握手。前两次是不能承载有效载荷的,第三次可以。服务器此时会通过五元组将该节点从半连接队列中取出放在全连接队列中。调用accept()将其与套接字fd绑定,并且返回。

此时三次握手已经结束,这个过程是在协议栈中完成的。与是否调用accept()函数无关。TCP三次握手是对于端系统而言的。

三次握手状态迁移:

服务器:listen----->(接收SYN,发送ACK后)SYN_RECV----->(接收ACK后)ESTABLISHED

客户端:close----->(发送SYN后)SYN_RECV------->(接收SYN,发送ACK后)ESTABLISHED

3.数据的传输

问题:1.TCP如何实现可靠传输?

​ 2.TCP如何保证顺序接收?

TCP报文段中的序号和确认号的作用:

TCP把数据看做无结构的,有序的字节流。所以序号是建立在字节流之上的而不是建立在数据报序列之上。所以报文段的序号就是该报文段首字节的字节流编号。

假设:数据流大小5000字节,MSS大小为1000。所以TCP为该数据流提供500个报文段,第一个报文段分配序号0,第二个就是1000,依次类推。

确认号:对于接收端来说,接收了多少的数据报,多少字节,就会填充进确认号中,发送给对端,以供确认。此时如果每一个数据报都返回一个ACK报文段,速率就会很慢,所以TCP提供的累积重传。假设收到1,2,4,5这样的数据报,返回的ACK就到2,意思是2之后的数据报全部重传。

超时重传机制:简单来讲就是一个RTT时间未收到ACK就会处理报文段丢失问题。但RTT时间间隔是一个加权平均值,最新的连接往返时间对RTT影响较大,能更好反应当前网络。

超时时间加倍问题:就是超时重传之后,RTT会是之前的两倍而不是经过加权的值,通过延缓时间能更好的解决拥塞问题。

拥塞控制:TCP双方会维护一个接收窗口,这个窗口就会告知对方自己的接收缓存还剩多大的空间,防止缓存溢出。

慢启动

快速重传

4.连接断开

四次挥手:

对于epoll中会有epollhup和epollrdhup

当一端调用close()时,会发送FIN数据报,会关闭自己的写端,对端接收到FIN数据报后会关闭自己的读端。此时就是错误返回epollrdhup。

状态迁移

服务器:ESTABLISHED-------》(接收到FIN数据报,返回ACK)CLOSE_WAIT---------》(发送FIN)LAST_ACK-----》CLOSE;

客户端:ESTABLISHED--------》(调用close(),发送FIN后)FIN_WAIT_1--------》(接收ACK后)FIN_WAIT_2--------》(接收FIN)TIME_WAIT(2MSL)--------》CLOSE

在网络编程中出现的问题

1.服务器出现大量的TIME_WAIT状态?

解决办法:1.出现TIME_WAIT是因为调用了close()函数,此时需要检查业务代码,查看调用close()的地方

2.用setsockopt()reuse设置可重用,在TIME_WAIT时tcb块的信息未被回收,设置可重用就不会等待2MSL时间。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。