先了解OSI七层模型(OSI是Open System Interconnect的缩写,意为开放式系统互联)

OSI层 功能
应用层

文件传输,电子邮件,文件服务,虚拟终端

表示层

数据格式化,代码转换,数据加密

会话层 解除或建立与其他接点的联系
传输层 提供端对端的接口
网络层 为数据包选择路由
数据链路层

传输有地址的帧,错误检测功能

物理层

以二进制数据形式在物理媒体上传输数据

TCP报文格式图

  1. 序号:Seq序号,占32位,用来标志从TCP源端向目的端发送的字节流,发送方发送数据时对此进行标志。
  2. 确认序号:Ack序号,占32位,只有ACK标志为1时,确认序号字段才有效,Ack=Seq+1。
  3. 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
    • URG:紧急指针有效。
    • ACK:确认序号有效。
    • PSH:接收方应该尽快将这个报文交给应用层。
    • RST:重置连接。
    • SYN:发起一个新连接。
    • FIN:释放一个连接。

所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务端总共发送三个包。

三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息。在socket编程中,客户端执行connect()时,将触发三次握手

TCP服务模型

一个TCP连接有一个4元组构成,分别是两个IP和两个端口号。一个TCP连接通常分为三个阶段:启动、传输数据、退出(关闭)。

当TCP接收到另一端的数据时,它会发送一个确认,但这个确认不会立即发送,一般会延时一会。ACK是累积的,一个确认字号N的ACK表示所有知道N的字节(不包含N)已经成功被接收了。这样的好处是如果一个ACK丢失,很可能后续的ACK就足以确认前面的报文段了。

一个完整的TCP连接时双向和对称的,数据可以在两个方向上平等地流动。给上层应用程序提供一种双工服务。一旦建立了一个连接,这个连接的一个方向上的每个TCP报文段都包含了相反方向上的报文段内的一个ACK。

序列号的作用是使得一个TCP接收端可丢弃重复报文段,记录以杂乱次序到达的报文段。因为TCP使用IP传输报文段,而IP不提供重复消除或者保证次序正确的功能。另一方面,TCP是一个字节流协议,绝不会以杂乱的次序给上层程序发送数据。因此TCP接收端会被迫先保持大序列号的数据不交给应用程序,直到缺失的小序列号的报文被填满。

源端口和目的端口在TCP层确定双方进程,

非常好的博文

https://blog.csdn.net/qq_38950316/article/details/81087809

最新文章

  1. 一个C++版的嵌入式操作系统
  2. Linux问题处理: stdio.h: No such file or directory linux
  3. 给11gR2 Dataguard打psu补丁的步骤及注意事项
  4. 有关于java反编译工具的使用
  5. jquery[siblings]取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合
  6. C#的yield关键字
  7. Java IO (4) - Writer
  8. Java报表开发组件DynamicReports
  9. Ubuntu14.04安装一个小问题,搜狗输入法
  10. [原创]HBase学习笔记(4)- 数据导入
  11. win10下Anaconda 2 和 3 共存安装,并切换jupyter notebook和Pycharm中的对应版本
  12. 使用 Moq 测试.NET Core 应用 -- Mock 属性
  13. 好的LCT板子和一句话
  14. 第九节:从源码的角度分析MVC中的一些特性及其用法
  15. DAY05、基本数据类型与内置方法
  16. German Collegiate Programming Contest 2018​ A. Attack on Alpha-Zet
  17. java_main
  18. W-GAN
  19. JSON 参考文档
  20. react系列(零)安装

热门文章

  1. keras手写数字识别
  2. RestFul是啥
  3. BZOJ 3060: [Poi2012]Tour de Byteotia 并查集
  4. Shell操作
  5. codeforces666A
  6. Centos 安装字体库 以及解决confluence 旧文档数据的乱码
  7. vue-property-decorator知识梳理
  8. Linux 服务器安装jdk,mysql,tomcat简要教程
  9. Python file 读写与操作
  10. phpStrom破解 + Your license has expired