一、应用层1.理解传输层的作用, 深入理解TCP的各项特性和机制 2.对整个TCP/IP协议有系统的理解 3.对TCP/IP协议体系下的其他重要协议和技术有一定的了解
我们之前编写完了基本的 java socket ,要知道,我们之前所写的所有代码都在应用层,都是为了完成某项业务,如翻译等。关于应用层,我们在讲解完毕基本的 TCP/IP 协议之后,我会单独来写一篇博客来介绍。
二、传输层传输层负责数据能够从发送端传输接收端.
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
我们自己写一个程序使用端口号时, 要避开这些知名端口号.
两个问题
- 一个进程是否可以bind多个端口号?
- 一个端口号是否可以被多个进程bind?
UDP协议端格式
16位UDP长度, 表示整个数据报(UDP首部 UDP数据)的最大长度; 如果校验和出错, 就会直接丢弃;
UDP的特点
UDP传输的过程类似于寄信.
无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;
不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;
面向数据报: 不能够灵活的控制读写数据的次数和数量;
理解 UDP 的 “不可靠”