学习TCP协议的时候,我们看到在TCP的段格式里面有6个标志位,在我们讨论这个问题之前,让我们来看看这个TCP段格式到底长了个什么样子?

(截的图太丑了但这不是重点。。。)URG、ACK、PSH、RST、SYN、FIN是六个控制位,他们的功能如下:

URG :表示本报文段中发送的数据是否包含紧急数据。URG=1,表示有紧急数据。后面的紧急指针字段只有当URG=1时才有效。
ACK :表示是否前面的确认号字段是否有效。ACK=1,表示有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1。
PSH :告诉对方收到该报文段后是否应该立即把数据推送给上层。如果为1,则表示对方应当立即把数据提交给上层,而不是缓存起来。
RST :只有当RST=1时才有用。如果你收到一个RST=1的报文,说明你与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明你上次发送给主机的数据有问题,主机拒绝响应。
SYN :在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1。
FIN :标记数据是否发送完毕。如果FIN=1,就相当于告诉对方:“我的数据已经发送完毕,你可以释放连接了”
可以看出URG和PSH的区别:虽然URG和PSH都是提高报文段的优先级,使报文段更先推送给上层,但是两者的实现方法是不一样的,URG是通过置1
来让后面的紧急指针字段有效,从而让报文段更先发送,而PSH是通过置1来告诉接收方在接收到报文段后应该立即把数据发给上层而不是缓存起来。
URG=1,紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的),PSH=1就是是把接收缓冲中排好序的那一段数据交给上层
URG它是一个正的偏移,与TCP首部中序号字段的值相加表示紧急数据后面的字节,即紧急指针是指向紧急数据最后一个字节的下一字节。这是协议编写上的一个错误,RFC1122中对此给出了更正说明,紧急指针是数据最后一个字节,不是最后字节的下一位置。TCP首部中只有紧急指针指出紧急数据的位置,它所指的字节为紧急数据,但没有办法指定紧急数据的长度。

网络编程(二):TCP段格式中的URG与PSH到底有什么不同?相关推荐

  1. 【Linux】网络篇二--TCP编程

    网络篇二--TCP编程 一.TCP编程实现 1.编程步骤 2.socket函数 3.bind函数 4.地址转换函数 5.listen函数 6.accept函数 7.connect函数 8.send函数 ...

  2. Windows Socket 网络编程(二)

    来源: http://www.vckbase.com/document/viewdoc/?id=484 Windows Socket 网络编程(二) -- 套接字编程原理 作者: 冰点工作室 小鹰 [ ...

  3. linux网络编程二:基础socket, bind, listen, accept, connect

    linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h>     #inc ...

  4. 【Linux】一步一步学Linux网络编程教程汇总(更新中......)

    00. 目录 文章目录 00. 目录 01. 基础理论知识 02. 初级编程 03. 高级编程 04. LibEvent库 05. 06. 07. 01. 基础理论知识 [Linux网络编程]网络协议 ...

  5. 网络编程——基于TCP协议的通讯录【课程设计】

    网络编程--基于TCP协议的通讯录[课程设计] 本文目录 网络编程--基于TCP协议的通讯录[课程设计] 一.设计题目和要求 设计目标: 课程设计系统组成及模块功能: 二.设计内容 服务端 客户端 S ...

  6. 21天学会Java之(Java SE第十三篇):网络编程、TCP/UDP通信

    如今,计算机已经成为人们学习.工作.生活必不可少的工具.人们利用计算机可以和亲朋好友在网上聊天,玩网游或发邮件等,这些功能的实现都离不开计算机网络.计算机网络实现了不同计算机之间的通信,而这些必须依靠 ...

  7. 【Linux网络编程】TCP带外数据

    [Linux网络编程]TCP带外数据 [1]TCP 包的部首 TCP带外数据相关概念 紧急字段URG     : 当URG=1时,告诉系统此报文段中有紧急数据,应尽快传送. 紧急指针         ...

  8. c++网络编程——用TCP实现文件传输(windows下基于VS2017)

    c++网络编程--用TCP实现文件传输 定义文件传输协议 服务端代码 客户端代码 测试 文件传输协议FTP是基于TCP协议实现的,为了体验这个过程,本文自定义一个简单的文件传输协议,并基于TCP协议编 ...

  9. 网络编程(TCP、UDP)

    一.概述 地球村:也译为世界村(global village),对地球的一种比喻说法.现代科技的迅速发展,缩小了地球上的时空距离,国际交往日益频繁便利,因而整个地球就如同是茫茫宇宙中的一个小村落. J ...

最新文章

  1. Linux如何编译安装源码包软件
  2. kali linux有线连接不见网络图标不见(解决方案)
  3. Linux桌面环境与命令行环境切换快捷键,以及linux 图形界面 X Server 关闭 启动
  4. SPOJ Pattern Find(Rabin Karp)
  5. 用VC++实现一个文本文件阅读器
  6. as工程放到源码编译_关于AS高版本SDK编译生成的apk放入低版本android源码中集成编译...
  7. node + express + mongodb 手动配置
  8. Bug本地接口不返回数据 线上返回数据
  9. javascript 编译与执行过程
  10. php位值,解决 PHP 中 usort 在值相同时改变原始位置的问题
  11. php 向ldap请求文件,绑定 LDAP 目录 - PHP 7 中文文档
  12. thinkphp3.2.3漏洞_Chrome新版本修复CVE202015999 0 day漏洞
  13. Spring Boot 返回 XML 数据,一分钟搞定!
  14. mysql乐观锁总结和实践 - 青葱岁月 - ITeye博客
  15. windows下GMT绘制矢量图
  16. 国产ETL工具/ETL 产品 (BeeDI ) 集团财务 双向同步 审核平台
  17. 【论文阅读】ICLR 2022: Scene Transformer: A unified architecture for predicting future trajectories of ...
  18. ShadowMap教程
  19. python计算分位数方法
  20. 西安交通大学计算机博士名单,2017年西安交通大学博士生拟录取名单公示(3)

热门文章

  1. MacOS python从图片中提取文字
  2. 个人号微信机器人接口
  3. 《NTFS文件系统扇区存储探秘》——第1章 FAT文件系统的数据结构 1.1 主引导记录...
  4. win10 忘记本地账户密码 可指纹或pin 等方式登录 找回密码 家庭版 专业版 教程 简单
  5. UPnP 端口映射原理
  6. 及时复盘的好处_及时复盘:最有效的自我学习方式
  7. DOS批处理+ftp自动同步文件
  8. WPF 网易云音乐PC端
  9. 手把手搭建游戏AI—如何使用深度学习搞定《流放之路》
  10. mysql 社区版密码如何修改_mysql修改密码