【JavaWeb学习笔记】TCP/IP协议(一)
2021/4/18 14:25:28
本文主要是介绍【JavaWeb学习笔记】TCP/IP协议(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.应用层
为了完成某项业务的代码在应用层
2. 传输层
负责数据能够从发送端传输接收端.
2.1 再谈端口号
端口号(Port)标识了一个主机上进行通信的不同的应用程序;
在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);
端口号范围划分:
0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定 的.
1024 -65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围 分配的
认识知名端口号(Well-Know Port Number)
有些服务器是非常常用的, 为了使用方便, 人们约定一些常用的服务器, 都是用以下这些固定的端口号:
- ssh服务器, 使用22端口
- ftp服务器, 使用21端口
- telnet服务器, 使用23端口
- http服务器, 使用80端口
- https服务器, 使用443
两个问题
1.一个端口号可以被多个程序使用吗?
不可以
2.一个程序可以绑定多个端口号吗?
可以,就像人和电话号码一样,一个人可以拥有多个电话号码,一个号码只能归属一个人。
2.2 UDP协议
UDP协议段格式
如果UDP编程的时候,数据大小大于64KB会怎样?
1.在应用层进行数据包的拆分和组合。
2.大于64KB不处理,交给TCP/IP协议在网络层进行分包和组包(不用)。
我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部).然而64K在当今的互联网环境下, 是一个非常小的数字;如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装
校验和
校验和是用来要确定数据在传输过程中是否被篡改,也就是用来判断数据的正确性。如何判断?
假设使用MD5算法进行校验和的计算,那么原始数据先通过这个算法得到一个值,将这个值存储在16位的校验和中;接收端接收到内容后,按照通过的规则加密数据得到一个校验和,用这个计算出来的校验和和UDP头中的16位校验和对比,如果相等则数据是正确的。
UDP的特点
UDP传输的过程类似于寄信;
- 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;
- 不可靠: 没有确认机制, 没有重传机制;如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;
- 面向数据报: 不能够灵活的控制读写数据的次数和数量
UDP的缓冲区
- UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;
- UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;
全双工&半双工
- 全双工:送数据的同时也能够接收数据,两者同步进行
- 半双工:就是指一个时间段内只有一个动作发生
UDP属于全双工。
基于UDP的应用层协议
- NFS: 网络文件系统
- TFTP: 简单文件传输协议
- DHCP: 动态主机配置协议
- BOOTP: 启动协议(用于无盘设备启动)
- DNS: 域名解析协议
2.3 TCP 协议
TCP全称为 “传输控制协议(Transmission Control Protocol”). 人如其名, 要对数据的传输进行一个详细的控制
TCP协议段格式
- 源/目的端口
- 32位序号/32位确认号
-
6位标识位
- 紧急 URG:此位置 1,表明紧急指针字段有效,它告诉系统此报文段中有紧急数据,应尽快传送。
- 确认 ACK:仅当 ACK = 1 时确认号字段才有效,TCP 规定,在连接建立后所有传达的报文段都必须把 ACK 置 1。
- 推送 PSH: 当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP 就可以使用推送(push)操作,这时,发送方 TCP 把 PSH 置 1 ,并立即创建一个报文段发送出去,接收方收到 PSH = 1 的报文段,就尽快地(即“推送”向前)交付给接收应用进程,而不再等到整个缓存都填满后再向上交付。
- 复位 RST:用于复位相应的 TCP 连接
- 同步 SYN:仅在三次握手建立 TCP 连接时有效。当 SYN = 1 而 ACK = 0 时,表明这是一个连接请求报文段,对方若同意建立连接,则应在相应的报文段中使用 SYN = 1 和 ACK = 1。因此,SYN 置 1 就表示这是一个连接请求或连接接受报文。
- 终止 FIN:用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放运输连接。
- 16位窗口大小
- 16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP首部, 也包含TCP数据部分
- 16位紧急指针: 标识哪部分数据是紧急数据;
- 40字节头部选项
TCP的八大特性
这篇关于【JavaWeb学习笔记】TCP/IP协议(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14后台交互资料入门指南
- 2024-11-14如何轻松创建项目环境:新手入门教程
- 2024-11-14如何抽离公共代码:初级开发者指南
- 2024-11-14Python编程入门指南
- 2024-11-14Python编程入门:如何获取参数
- 2024-11-14JWT 用户校验:简单教程与实践
- 2024-11-14Pre-commit 自动化测试入门指南
- 2024-11-14Python编程基础
- 2024-11-14Server Action入门教程:轻松掌握服务器操作
- 2024-11-14Server Component入门教程:轻松搭建服务器组件