计算机网络之TCP

TCP是传输层协议,以太网(Ethernet)规定了电子信号如何组成数据包的,解决了子网内部的点对点协议,但是不能解决多个局域网之间的互通,这是由IP协议解决,IP协议定义了一套自己的地址规则,成为IP地址。它实现了路由功能,允许某个局域网A主机向另一个局域网B主机传输信息。路由器基于IP地址,局域网之间靠路由器连接,路由器有路由表,会有一篇文章专门来说路由器。IP协议可以看作是一个地址协议,并不能保证数据包的完整性,比如数据包在缓存满的时候丢失,需要去发现哪个包,以及如何去重新发送这个包,这就是TCP协议。
TCP协议的作用
保证数据通信的完整性和可靠性,防止丢包。
TCP数据包的编号SEQ
第一个包编号随机数,一个数据包有两个编号,一个是本包编号,一个是下一个包编号,差值是本包的负载长度。
TCP数据包的组装
数据包组装还原是依靠操作系统的,组装好之后给应用系统。
网络层和运输层的区别
网络层是主机之间的逻辑通信。
运输层是为应用进程之间提供端对端的逻辑通信。
TCP的特点
TCP提供面向连接的服务,传输数据前先建立连接,数据传输结束后释放连接。
使用TCP协议的各种应用和应用层协议:电子邮件(SMTP简单邮件传送协议),远程终端接入(TELNET远程终端协议),万维网(HTTP超文本传送协议),文件传送(FTP文件传送协议)。
TCP传输控制协议概述
a:)面向连接。
b:)每一个TCP协议只能有两个断点,每一条TCP协议只能是点对点的。
c:)TCP提供可靠的交付服务。(通过TCP连接传送的数据,无差错,不丢失,不重复,并且按顺序到达)
d:)提供全双工通信。
e:)面向字节流。
TCP连接
TCP把连接作为最基本的抽象。(TCP有很多特点都跟着东西有关)
TCP连接的端口叫做套接字或者插口。
官方定义是:端口号拼接到IP地址。
例子:ip地址是(192.3.4.5),端口号(80)
那么套接字就是192.3.4.5:80
TCP连接是两个套接字。
TCP连接的端口是一个很抽象的套接字。
现如今socket有很多意思
允许应用程序访问联网协议的应用编程接口API,即运输层和应用层之间的一种接口socket API,简称socket。
socket API之中也有一个函数叫做socket。
可靠传输的原理
TCP发送的报文是交给IP层传送,但是IP层只能提供尽最大努力的服务,也就是说TCP下面的网络都是不可靠的。
TCP必须采取适当的措施才能使得两个运输层之间的通信变得可靠。
理想的传输条件有两个特点:
a:传输信道不产生差错
b:壶关发送方多快发送数据,接收方都来得及处理
然而现实生活中是不存在的,所以我们用一些可靠协议来让传输条件变得贴近理想。
停止等待协议
全双工通信的双方既是发送方也是接收方。
a:)无差错情况:发送方发送数据单元,等待接收方确认,接收方向发送方发送确认,发送方继续发送下一组。
b:)出现差错:接收方接受数据单元的时候发生了差错,就丢失数据,接收方不发送任何信息。可靠传输协议是这么规定的,发送方如果一段时间没有收到确认信息,那么就认为发送的分组丢失了,从而重传前面发送过的数据,这就是超时重传
c:)确认丢失和确认迟到:
确认丢失:就是收到了,但是确认信息没发到发送方,发送方重新传输数据,接收方会丢弃数据但是会重传确认。
确认迟到:就是确认信息不知为什么没及时发送到发送方,导致发送方已经重传并且确认了,然后发送方又收到了姗姗来迟的确认,这时候发送方收到确认但是什么也不做。
d:)信道利用率:停止等待协议的优点是很简单,但是缺点是信道利用率太低,计算公式等于发送方发送数据时间/(发送方发送数据时间+往返时间+发送方接收确认数据时间)
为了解决信道利用率低的方法
连续的ARQ协议和滑动窗口协议
连续的ARQ协议
连续的多个数据组成一个窗口,一个窗口内的数据是不需要接收到确认再发的,连续ARQ协议规定发送方接收到一个确认,就把窗口向前滑动一个位置。
接收方一般是累计确认,就是说接收到多个数据一起发送确认信息。
累计确认的优点:容易实现,即使确认丢失也并不比重传。
累计确认的缺点:不可以向发送方反应接收方已经正确收到数据的信息。
例子:发送方发六个数据,第五个丢了,那么接收方只对前四个发出确认,后边三个只能重传一次。
如果线路信号不好,那么就会导致很多重传问题。
TCP报文格式
TCP虽然是面向字节流的,但是传送的数据是报文段,一个TCP报文段分为首部和数据两部分。
源端口和目的端口。
序号:用来到时候表示字符串顺序的。
确认号:想要的下一个数据的第一个数据的序号,也是用来表明字符串顺序的。
窗口:窗口值经常动态变化。
检验和:检查机关,检查首部和数据的范围。
TCP可靠传输的实现
首先是滑动窗口增加效率,然后TCP的自适应算法来计算超时重传的时间。
TCP的流量控制
简单来说就是别让发送方传输数据过快,让接收方来不及接受,导致数据丢失。
TCP的拥塞控制
什么是拥塞?
在某段时间内,网络中的某一资源的需求超过了该资源所提供的可用部分,网络性能变坏,这就叫做拥塞。
从大的方面可以看有两种方法来进行拥塞控制,分别是开环控制(措施在前)和闭环控制(措施在后)。
拥塞控制方法?
四种算法:慢开始,拥塞避免,快重传,快恢复。
慢开始:以2的倍数增加,增加到门限值。
拥塞避免:门限值到拥塞窗口期间,一个一个增加,增加到拥塞窗口的时候,超时判断网络拥塞,调整门限值为原来一半,然后重新慢开始。
快重传:发送方接收到三个重复确认,那么就立即进行重传,因为只是丢失个别,所以不启动慢开始,而是快恢复,同时限制门限值为原来一半,直接进行拥塞避免算法。
TCP的运输连接管理
运输连接有三个阶段:连接建立,数据传输,链接释放。
TCP建立连接的过程叫做握手,握手需要在客户端和服务器之间交换三个TCP报文段,所以也叫做三次握手
三次握手过程(A作为主动连接方,B是被动打开连接方):
一开始,B的TCP服务器进程首先创建传输控制块TCP,准备接受客户进程的连接请求然后进入listen状态。
A的TCP也是先创建传输控制模块TCB,然后打算建立连接的时候,向B发送请求报文段,这时候首部的同步位SYN=1,同时选择序号seq=x。(TCP规定,SYN报文段不可以携带数据,但是要消耗一个序号,这时候A进入了SYN-sent(已发送状态))。
B收到连接请求,如果同意链接,那么向A发送确认。(把确认报文段的SYN和ACK都置1,确认号ack=x+1,给自己一个初始序列seq=y,也要消耗一个序列,这时候B就进入SYN-rcvd(同步收到)状态)。
A收到B的确认后,还要向B确认,确认ACK报文段置1,确认号ack=y+1,自己序号seq=x+1,同时也为自己选择一个。(TCP标准规定,ACK可以携带数据,如果不携带数据则会不消耗序列,A进入及建立连接状态)。
B收到A的确认后也进入已建立连接状态。
为什么最后A还要发送一次确认?这是因为防止已失效的连接请求报文有传送到了B,因而产生错误。
四次挥手,释放连接
四次挥手图

猜你喜欢

转载自blog.csdn.net/qq_42784105/article/details/82623994