TCP连接的建立---三次握手

第一次握手:客户端TCP首先给服务器端TCP发送一个特殊的TCP数据段。

该数据段不包含应用层数据,并将头部中的SYN位设置为1,所以该数据段被称为SYN数据段。

另外,客户选择一个初始序列号SEQ,设SEQ=x 并将这个编号放到初始的TCP SYN数据段的序列号字段中。该数据段被封装到一个IP数据报中,并发送给服务器。

第二次握手:一旦装有TCP SYN数据段的IP数据报到达了服务器主机,服务器将从该数据报中提取出TCP SYN数据段,给该连接分配TCP缓冲区和变量,并给客户TCP发送一个允许连接的数据段。

这个允许连接的数据段也不包含任何应用层数据。但是,它的头部中装载着3个重要信息。首先,SYN被设置为1;其次,TCP数据段头部的确认字段被设置为x+1;最后,服务器选择自己的初始顺序号,SEQ=y,并将该值放到TCP数据段头部的

序列号字段中。

第三次握手:在接收到允许连接数据段之后,客户也会给连接分配缓冲区和变量。客户端主机还会给服务器发送另一个数据段,对服务器的允许连接数据段给出确认。

 

TCP协议中连接建立的过程

TCP连接的释放---三(或者四)次握手

第一次握手:由进行数据通信的任意一方提出要求释放连接的请求报文段。
第二次握手:接收端收到此请求后,会发送确认报文段,同时当接收端的所有数据也都已经发送完毕后,接收端会向发送端发送一个带有其自己序号的报文段。
第三次握手:发送端收到接收端的要求释放连接的报文段后,发送反向确认。

TCP连接的释放过程

TCP数据报文

  序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。

序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

  确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

  数据偏移——占 4  bit,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。

  保留字段——占 6 bit,保留为今后使用,但目前应置为 0。

  

  紧急比特 URG —— 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

  确认比特 ACK —— 只有当 ACK= 1 时确认号字段才有效。当 ACK= 0 时,确认号无效。

  推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。

  复位比特 RST (ReSeT) —— 当 RST= 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,通知一下对方。

  同步比特 SYN —— 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。

  终止比特 FIN (FINal) —— 用来释放一个连接。当FIN= 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

  

  检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据和伪段头(不是TCP里的信息,

但是计算校验和的时候也计算了的内容:IP地址,TCP数据段长度,协议类型)。

  紧急指针字段 —— 占 16 bit(2 字节)。紧急指针指出在本报文段中的紧急数据的位置。

  选项字段 —— 长度可变。TCP 规定了二种选项,最大报文段长度和窗口扩大因子。

最大报文段长度 MSS (Maximum Segment Size) 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”

MSS 是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。

窗口扩大因子,用于扩大接收方窗口。

  填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。

TCP 初步认识的更多相关文章

  1. 【PHPsocket编程专题(理论篇)】初步理解TCP/IP、Http、Socket.md

    前言 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API).那TCP/IP又是什么呢?TCP/IP是ISO/OS ...

  2. 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为

    初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...

  3. java socket初步学习一 ( tcp)

    Java socket通信程序: 第一版本: 实现功能: 服务器地址:127.0.0.1  端口:5050 客户机:端口5050 客户端发送字符:“t” 服务器接收到该字符并回复:“r” 流程: 建立 ...

  4. 图解TCP/IP→第2章基础知识

    ####TCP.IP背景**关键词:ARPANET,UNIX,分组交换技术,*ARPANET(阿帕网),也是全球互联网的鼻祖.阿帕网的成功也充分证明了基于分组交换技术的通信方法的可行性.*20世纪70 ...

  5. ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

  6. 移动端IM系统的协议选型:UDP还是TCP?

    1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...

  7. 传输层协议TCP和UDP

    本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...

  8. Python3实现TCP端口扫描

    在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞. TCP端 ...

  9. Wireshark基本介绍和学习TCP三次握手

    wireshark介绍 wireshark的官方下载网站: http://www.wireshark.org/ wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示 ...

随机推荐

  1. Python3.x:获取代理ip以及使用

    Python3.x:获取代理ip以及使用 python爬虫浏览器伪装 #导入urllib.request模块 import urllib.request #设置请求头 headers=("U ...

  2. 20145307陈俊达《信息安全系统设计基础》第5周学习总结PT1

    20145307陈俊达<信息安全系统设计基础>第5周学习总结 教材学习内容总结 X86寻址方式经历三代: DOS时代的平坦模式,不安全,原因是没有区分用户空间和内核空间 8086的分段模式 ...

  3. 20145312 实验五《Java网络编程》

    20145312 实验五<Java网络编程> 一. 实验内容及要求 实验内容: 运行下载的TCP代码,结对进行,一人服务器,一人客户端: 利用加解密代码包,编译运行代码,一人加密,一人解密 ...

  4. Commons FileUpload

    转载自(https://my.oschina.net/u/2000201/blog/486744) 1    概述 Commons FileUpdate包很容易为你的Servlet和web应用程序添加 ...

  5. linxu 安装rabbitMQ

    转载自:http://blog.csdn.net/mooreliu/article/details/44645807 首先使EPEL(http://fedoraproject.org/wiki/EPE ...

  6. java中枚举类的实际应用

    知识点:在Java中,使用枚举类,当遇到实例类型有限的类时,并且数据库中用状态码代表一种含义时,如星期,性别,员工登陆某系统的状态等等, 可以考虑使用枚举类 本例子可以仿照,也可以使用自定义的类型处理 ...

  7. PAT1070. Mooncake (25)

    #include #include #include <stdio.h> #include <math.h> using namespace std; struct SS{ d ...

  8. c++之单例模式

    1 本篇主要讨论下多线程下的单例模式实现: 首先是 double check 实现方式: 这种模式可以满足多线程环境下,只产生一个实例. template<typename T> clas ...

  9. 一些常用的CDN列表

    Microsoft Ajax Content Delivery Network 点击查看详细列表

  10. 解决httpclient请求响应压缩文本乱码问题

    最近在调用京东的获取省份接口老是中文乱码,加了utf-8也没有用.最后在httpclient打的日志中有Content-Encoding:gzip信息,最后在请求header里加上: reqHeade ...