TCP协议学习笔记(一)首部以及TCP的三次握手连接四次挥手断开
TCP协议是一种面向连接的、可靠的流协议。
流即不间断的数据结构。这样能够保证接收到数据顺序与发送相同。但是犹如数据间没有间隔,因此在TCP通信中,发送端应用可以在自己所要发送的消息中设置一个标示长度或间隔的字段信息。
由于TCP为应用提供可靠传输,所以需要对数据传输时数据破坏、丢包、重复以及乱序问题有充分的控制能力。同时TCP协议作为面向连接的协议,只有确认对端存在才会发送数据。
TCP通过检验和、序列号、确认应答、重发控制、连接管理、窗口控制等实现可靠传输。
当传输层采用TCP协议进行通信时,TCP数据被封装在一个IP数据报里,首先来看一下TCP首部的构成,不包括可选字段,TCP首部一般是20个字节:

看书的时候把首部各部分的意义画在了图中,简单来说,TCP数据报通过源端端口号和目的端口号来确认彼此使用TCP的程序,序号和确认序号用于完成字节流的标识,使其能够按照发送的顺序被接收。窗口大小指的是滑动窗口协议的大小,检验和用来检验当前收到的数据包是不是有应该收的。具体我都在看书过程中画在图里了。
TCP是面向连接的可靠传输,在每次通信之前都需要先建立链接,建立一个新连接的时候:
- 请求端(客户端)发送一个SYN段指明建立连接的端口,此时TCP首部中,SYN字段被设置为1,序号字段是一个随机生成的初始序号(ISN),可选字段中会有一个己方能够发送的数据包最大长度MSS
- 服务器收到这个报文之后,发送一个ACK给客户端,这个数据包中,ACK和SYN字段被设置为1,序号字段是一个随机生成的初始序号(与客户端的不同),确认序号字段是客户端的ISN+1,可选字段有一个服务器所能够发送的MSS
- 客户端接收到这个报文之后,发送一个ACK给服务器,这个数据包中,ACK字段为1,确认序号为服务器的ISN+1
MSS的确认是建立连接的过程中实现,但是如果有一方不接收来自另一方的MSS,则设定为默认值536(这个默认值允许20字节的IP首部以及20字节的TCP首部以适合576字节的IP数据报)
在通信结束之后,需要经过4次挥手断开链接(这是由TCP的半关闭造成的),在这个过程中,第一个发送FIN的执行主动关闭,另一方执行被动关闭。当客户端结束数据传输,给对方发送一个FIN数据包请求关闭链接,,服务器收到FIN后回复一个ACK。而后服务器再给客户端发送一个FIN请求关闭链接,客户端回复一个ACK,即可完成关闭。
附图:TCP/IP详解(注意建立连接与关闭链接中双方的序号关系,起始ISN是随机产生的)

在建立连接与断开链接的过程中,有一个非常重要的问题,就是丢包处理。一般会设置一个最长等待时间,当发送方超过最长等待时间接收不到对方回复,就会重发刚才的数据包。而接收方如果接到数据包,会根据序号(或其他策略)判断是不是重复的数据包从而接收或者丢弃。
还有很重要的在建立连接与关闭链接过程中,TCP的状态变迁:

- TIME_WAIT状态也称为2MSL等待状态,MSL是任何报文段被丢弃前在网络内存活的最长时间。当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留时间为2倍的MSL,这样可以让TCP再次发送最后的ACK防止ACK丢失。另外,谁执行主动关闭,谁进入TIME_WAIT状态,谁被动关闭,谁进入CLOSE_WAIT状态
- FIN_WAIT_2状态,是已经发出FIN并且另一端已经确认,除非实行半关闭,否则等待另一端发送FIN请求关闭链接。只有当另一端的进程完成这个关闭,这端才会从FIN_WAIT2状态进入TIME_WAIT状态
TCP协议学习笔记(一)首部以及TCP的三次握手连接四次挥手断开的更多相关文章
- “三次握手,四次挥手”你真的懂吗?TCP
“三次握手,四次挥手”你真的懂吗? mp.weixin.qq.com 来源:码农桃花源 解读:“拼多多”被薅的问题出在哪儿?损失将如何买单? 之前有推过一篇不错的干货<TCP之三次握手四次挥手 ...
- 你应该这么理解TCP的三次握手和四次挥手
前言: TCP协议是计算机的基础,他本身是一个非常非常复杂的协议. 本文只是蜻蜓点水,将从网络基础以及TCP的相关概念介绍开始,之后再将三次握手,四次挥手这些内容来阐述. 最后介绍一些常见问题,并给出 ...
- TCP协议三次握手与四次挥手详解
在计算机网络的学习中TCPi协议与Http协议是我们必须掌握的内容,其中Tcp协议属于传输层,而Http协议属于应用层,本博客主要讲解Tcp协议中的三次握手与四次挥手,关于Http协议感兴趣的可以参看 ...
- TCP/IP协议三次握手和四次挥手大白话解说
前言 昨天晚上被一位师傅问到了TCP/IP的工作机制,心里很清楚三次握手,然而对于四次挥手却忘了,这是大学习里学过的,奋而翻阅书籍和网络对之前所学的做一个温顾,算是夯实自我吧. TCP(Transmi ...
- 学习 TCP 三次握手和四次挥手
TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答. 本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地 ...
- TCP协议详解7层和4层解析(美团,阿里) 尤其是三次握手,四次挥手 具体发送的报文和状态都要掌握
如果想了解HTTP的协议结构,原理,post,get的区别(阿里面试题目),请参考:HTTP协议 结构,get post 区别(阿里面试) 这里有个大白话的解说,可以参考:TCP/IP协议三次握手和四 ...
- TCP协议--TCP三次握手和四次挥手
TCP三次握手和四次挥手 TCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急) 一.TCP三次握手 第一次握手 客户端向服务器发出连 ...
- TCP的三次握手与四次挥手笔记
TCP的三次握手与四次挥手笔记 TCP Flags URG: 紧急指针标志 ACK:确认序号标志 PSH:push标志 RST:重置连接标志 SYN:同步序号,用于建立连接过程 FIN: finish ...
- 跟着动画学习 TCP 三次握手和四次挥手
TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答. 本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地 ...
随机推荐
- NEFU 561 方块计算
题目链接 简单搜索题 #include <cstdio> #include <iostream> #include <cstring> using namespac ...
- [jquery]添加行内容后根据下拉菜单选择内容对比之前已有选项,若有重置再提示
今天页面上一个添加列内容时,要对选择内容与之前已有选项内容作对比,防止用户重复选择内容 页面HTML代码 <ul class="list-group xj-list-NObor xj- ...
- AngularJS Select(选择框)
AngularJS 可以使用数组或对象创建一个下拉列表选项. 使用 ng-option 创建选择框 在 AngularJS 中我们可以使用 ng-option 指令来创建一个下拉列表,列表项通过对象和 ...
- __cdecl 、__fastcall、__stdcall
调用约定: __cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数 ...
- (转).NET开发人员必备的可视化调试工具(你值的拥有)
1:如何使用 1:点击下载:.NET可视化调试工具 (更新于2016-11-05 20:55:00) 2:解压RAR后执行:CYQ.VisualierSetup.exe 成功后关掉提示窗口即可. PS ...
- 给Android系统安装busybox
转自:http://blog.csdn.net/lxgwm2008/article/details/38925051 busybox号称Linux平台的瑞士军刀,它集成了100多个最常用的Linux命 ...
- 【Java EE 学习 32 下】【JQuery】【JQuey中的DOM操作】
一.JQuery中的DOM操作. 什么是DOM:DOM是一中和浏览器.平台.语言无关的接口,使用该接口可以轻松访问页面中所有的标准组件.DOM简称文档对象模型,是Document Oject Mode ...
- iOS 应用内的系统复制粘贴菜单显示的语言非中文
在应用的 Info.plist 文件中添加以下代码: <key>CFBundleLocalizations</key> <array> <string> ...
- HTML5 标签audio添加网页背景音乐代码
<head> <meta http-equiv="Content-Type" name="viewport" content="wi ...
- SPX Instant Screen Capture
Today I will recommend a NICE screen capture tool, which name is SPA Instant Screen Capture. http:// ...