网络编程杂谈之TCP协议

Java40

TCP协议属于网络分层中的传输层,传输层作用的就是建立端口与端口的通信,而其下一层网络层的主要作用是建立"主机到主机"的通信,所以在我们日常进行网络编程时只要确定主机和端口,就能实现程序之间的数据交流,在Unix系统中就把主机+端口,叫做"套接字"(socket),所以一般网络编程都是基于对于socket的操作来做的。

TCP协议其实是一个非常复杂的协议,做过网络编程开发的都听过一句话''TCP本身是一种可靠的协议",但正是为了保证可靠性,TCP 内部使用了如各种重传与控制算法,所以 TCP 是一个内部原理复杂,但是使用起来比较简单的协议。

下面我们对TCP协议进行一个基本的介绍,本文只是站在应用的角度上阐述,相比与真正的深入还是比较浅显的。

一、TCP协议格式

首先主要看下TCP协议的头格式

网络编程杂谈之TCP协议

其中各字段的意义如下:

1、TCP源端口(Source Port):16位的源端口其中包含发送方应用程序对应的端口。源端口和源IP地址标示报文发送端的地址。

2、TCP目的端口(Destination port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

3、包序号(Sequence Number):32位的SN序列号标识了TCP报文中第一个byte在对应方向的传输中对应的字节序号,用来记录网络包顺序,解决传输中的乱序、重复问题,比如发送端发送的一个TCP包净荷(不包含TCP头)为10byte,SN为5,则发送端接着发送的下一个数据包的时候,SN应该设置为5+10=15。通过序列号,TCP接收端可以识别出重复接收到的TCP包,从而丢弃重复包,同时对于乱序数据包也可以依靠系列号进行重排序,进而对高层提供有序的数据流。另外如果接收的包中包含SYN或FIN标志位,逻辑上也占用1个byte,应答号需加1。

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Kafka基本理论 Java

Kafka基本理论

基本特点 异步解耦、削峰填谷 Topic 分区/分区备份,集群互为某分区备份 broker控制,分区leader/follower 单分区保证消息时间顺序 offset,分区内消息编号,便于不同消费者...
MySQL学习-eclipse导入jar包 Java

MySQL学习-eclipse导入jar包

导包先有包 !!!一定要下载和自己MySQL版本一样的jar包!!! !!!一定要下载和自己MySQL版本一样的jar包!!! !!!一定要下载和自己MySQL版本一样的jar包!!! 如果没有包,参...
IDEA新建项目时的默认配置与模版配置 Java

IDEA新建项目时的默认配置与模版配置

今天一大早,群里(点击加群)有小伙伴问了这样的一个问题: 在我们使用IDEA开发项目的时候,通常都会有很多配置项需要去设置,比如对于Java项目来说,一般就包含:JDK配置、Maven配置等。那么如果...
05 Java中的输入、输出流 Java

05 Java中的输入、输出流

输入输出流 内容概括: 存在java.io包中 所有输入流都是抽象类InputStream(字节输入流)和抽象类Reader(字符输入流)的子类。 所有输出流都是抽象类OutputStream(字节输...
自己挖坑自己埋 Java

自己挖坑自己埋

谨用于记录自己在设计时由于考虑不周导致的隐患,阿门。 2021-07-19 新近上线了《智能串接》功能,该功能类似于各种工程项目中的quickStart功能,在该模块设计时留下了两个弊端。 一是部分无...
《Thinking In Java》作者:不要使用并发! Java

《Thinking In Java》作者:不要使用并发!

前言 今天纯粹就是带你们来读读书的~ 最近除了工作,特地买回了自己很喜欢的作者新发售的一本书《On Java》,作者是我的老朋友布鲁斯·埃克尔,在Java领域很有名,你可能没听过他的名字,但极有可能听...
DHCP 动态主机设置协议 分析 Java

DHCP 动态主机设置协议 分析

在TCP/IP网络中,每个接口都需要一个IP地址、子网掩码和广播地址( IPv6中没有),简单来说就是需要网络配置信息。如果想访问外部网络可以通过DNS获取外部地址,再通过路由间接转发出去。但是在"家...
Python requests, pasel多线程爬取并下载小说 Java

Python requests, pasel多线程爬取并下载小说

使用PYTHON语言,用到的外部包有pasel, requests。 逻辑:首先得到该小说所有章节地址,再使用多线程访问链接,得到的内容放入object列表中,最后写入本地文件。 功能:设置菜单,由此...
sql索引优化思路 Java

sql索引优化思路

【开发】SQL优化思路(以oracle为例) powered by wanglifeng https://www.cnblogs.com/wanglifeng717 单表查询的优化思路 单表查询是最简...
SpringMVC完整学习!!! Java

SpringMVC完整学习!!!

1.楔子 1.1、了解MVC 1.2、MVC框架的主要功能 2.初识SpringMVC 2.1、为什么要学习SpringMVC 2.2、了解SpringMVC 3.入门项目初体验! 4.Control...