网络工程之TCP协议

初次接触网络工程,很多概念都有点迷糊,观阅大神文章,才有了理解,详细内容大家可以看大神的文章
原文:
TCP协议: https://blog.csdn.net/devcloud/article/details/98946090
摘要:
想了解TCP,首先我们得知道网络模型,其次应该知道TCP经典的“三次握手(建立链接)”以及“四次挥手(断开链接)”
正文:
一、关于网络模型:
整个互联网的底层机制是由一套标准网络协议组成的,为了更方便于理解,人们便定义了所谓的“网络分层模型"。 在学习计算机网络课程的时候,都会提到两种网络模型,如下:
在这里插入图片描述
OSI 模型,全称为 Open System Interconnection,即开放系统互联模型,这个是由 ISO(International Organization for Standardization) 国际标准化组织提出的。 它主要是用来解决当时各个网络技术供应商在协议上无法统一的问题,通过将整个网络体系结构抽象为 7层,从最底层的物理层、数据链路层一直到最上面的应用层都做了定义

TCP/IP,即 TCP/IP Protocol Suite(协议套件)是一个以TCP协议和IP协议为核心的通信模型,该模型采用协议堆栈的方式来实现许多通信协议,并将通讯体系抽象为4层。 TCP/IP 模型最早发源于美国国防部(缩写为DoD)的ARPA网项目,此后就交由IETF组织来维护

二、关于TCP
TCP 是传输层的协议,全称是叫做 Transmission Control Protocol,这个协议在 IETF RFC 793 进行了定义。 在互联网产生之前,我们的电脑都是相互独立的,每台机器都有着自己的操作系统并保持着自己的运行。 于是,为了将这些电脑连接起来,并能够基于一种"通道"的形式进行数据、资源的传输及交互,IETF 制定了 TCP 协议

TCP协议的特点:
TCP 是整个 TCP/IP 协议族中最重要的传输层协议,它定义了一种面向连接的、可靠的、基于流的传输方式。

TCP 的特点?
首先,TCP 是基于连接的,也就是在进行数据传输之前,客户端与服务端(或者说是通信的双方)需要先建立一个可信的连接。 在数据传输结束后,再通过一种协定的方式断开连接,由通信的双方释放资源。这里涉及到的,就是常说的"三次握手"、“四次挥手”

其次,TCP 是可靠的,它定义了一种数据包的"超时重传机制",简单说,就是每一个数据包在发送出去后的都会等待一个响应。 如果指定时间内没有收到响应,由发送方进行一定次数的重传来保证数据的可靠传输。

最后,TCP 是基于流的,这是指在传输数据时应用层不需要关注数据包的边界,TCP在数据传输时会自动根据网络环境将数据进行缓冲、分组、合并。 这点跟基于报文的协议(UDP)是截然不同的。当然,基于流的传输也保证了数据收发的有序性,因此每个数据包都附带上一个属于当前连接的序列号。

TCP工作流程:
链是指链路,这个是物理层的概念,比如光缆光纤,或是无线的电磁波。 但这里所说的链路其实是网络连接的意思,即IP 上层的概念。 那么,一个TCP 正常的通讯流程,会包含建链(建立连接)、传输数据、拆链(关闭连接),如下图所示:

在这里插入图片描述
据上图所示,在进行 TCP 进行数据传输时,都不可避免的会经过这两个阶段:

三次握手建立连接

执行数据传输、双方读写

四次挥手释放连接

下面,重点说明下建链与拆链的过程

2.1三次握手
在这里插入图片描述
在建立TCP连接时,需要经过三次交互,也成为三次握手(HandShake)。

1、客户端发起连接请求,发送 SYN包(SYN=i)到服务器,并进入到SYN-SEND状态,等待服务器确认
2、服务器收到SYN包后,必须确认客户的 SYN(ack=i+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN-RECV状态
3、客户端收到服务器的SYN+ACK包,向服务器发送确认报ACK(ack=k+1),此后客户端和服务器进入ESTABLISHED状态,双方可以开始传送数据。

这里有几个问题需要注意下,有需要的同学可以在上边的链接中进一步学习:
问题1. 为什么是三次握手
问题2. 什么是syn flood攻击
问题3. 半连接队列和全连接队列如何调优

2.2四次挥手
在这里插入图片描述
在释放连接时,由于TCP是全双工的,因此最后要由两端分别进行关闭,这个流程如下:

1、客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态。
2、服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态,而客户端进入FIN_WAIT2状态。
3、服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
4、客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成释放。

关闭连接有主动关闭和被动关闭一说,这里为了简化理解,我们以客户端作为主动关闭方,服务器为被动关闭方。

四次挥手需要关注的问题:

问题1. 为什么是四次挥手
问题2. 什么是半关闭
问题3. 为什么服务器会有大量 closewait
问题4. timewait 会带来什么问题
问题5. RST 是什么,为什么会出现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值