保证可靠性
序列号和确认号机制
TCP
发送端发送数据包的时候会选择一个
seq
序列号,接收端收到数据包后会检测数据包的完整性,如果检测通过会响应一个 ack
确认号表示收到了数据包。
超时重发机制
TCP
发送端发送了数据包后会启动一个定时器,如果一定时间没有收到接受端的确认后,将会重新发送该数据包。
对乱序数据包重新排序
从
IP
网络层传输到
TCP
层的数据包可能会乱序,
TCP
层会对数据包重新排序再发给应用层。
丢弃重复数据
从
IP
网络层传输到
TCP
层的数据包可能会重复,
TCP
层会丢弃重复的数据包。
流量控制
TCP
发送端和接收端都有一个固定大小的缓冲空间,为了防止发送端发送数据的速度太快导致接收端缓冲区溢出,发送端只能发送接收端可以接纳的数据,为了达到这种控制效果,TCP
用了流量控制协议(可变大小的滑动窗口协议)来实现。
OSI 的七层模型
OSI
七层模型一般指开放系统互连参考模型
(Open System Interconnect
简称
OSI)
是国际标准化组织(ISO)
和国际电报电话咨询委员会
(CCITT)
联合制定的开放系统互连参考模型
,
为开放式互连信息系统提供了一种功能结构的框架。
- 应用层:各种应用程序协议,比如 HTTP、HTTPS、FTP、SOCKS 安全套接字协议、DNS 域名系统、GDP 网关发现协议等等。
- 表示层:加密解密、转换翻译、压缩解压缩,比如 LPP 轻量级表示协议。
- 会话层:不同机器上的用户建立和管理会话,比如 SSL 安全套接字层协议、TLS 传输层安全协议、RPC 远程过程调用协议等等。
- 传输层:接受上一层的数据,在必要的时候对数据进行分割,并将这些数据交给网络层,保证这些数据段有效到达对端,比如 TCP 传输控制协议、UDP 数据报协议。
- 网络层:控制子网的运行:逻辑编址、分组传输、路由选择,比如 IP、IPV6、SLIP 等等。
- 数据链路层:物理寻址,同时将原始比特流转变为逻辑传输路线,比如 XTP 压缩传输协议、PPTP 点对点隧道协议等等。
- 物理层:机械、电子、定时接口通信信道上的原始比特流传输,比如 IEEE802.2 等等。
以下是一些常用协议的端口号及其对应的网络层次:
- HTTP (Hypertext Transfer Protocol): 80 (应用层)
- HTTPS (Hypertext Transfer Protocol Secure): 443 (应用层)
- FTP (File Transfer Protocol): 20 (数据传输)和21 (控制连接) (应用层)
- SSH (Secure Shell): 22 (应用层)
- Telnet: 23 (应用层)
- SMTP (Simple Mail Transfer Protocol): 25 (应用层)
- DNS (Domain Name System): 53 (应用层)
- DHCP (Dynamic Host Configuration Protocol): 67 (服务器)和68 (客户端) (应用层)
- POP3 (Post Office Protocol version 3): 110 (应用层)
- IMAP (Internet Message Access Protocol): 143 (应用层)
- SNMP (Simple Network Management Protocol): 161 (应用层)
- RDP (Remote Desktop Protocol): 3389 (应用层)
- NTP (Network Time Protocol): 123 (应用层)
- ICMP (Internet Control Message Protocol): N/A (网络层)
- TCP (Transmission Control Protocol): N/A (传输层)
- UDP (User Datagram Protocol): N/A (传输层)
浏览器中输入:“www.woaijava.com”之后都发生了什么?
- 由域名→IP地址 寻找IP地址的过程依次经过了浏览器缓存、系统缓存、hosts文件、路由器缓存、 递归搜索根域名服务器。
- 建立TCP/IP连接(三次握手具体过程)
- 由浏览器发送一个HTTP请求
- 经过路由器的转发,通过服务器的防火墙,该HTTP请求到达了服务器
- 服务器处理该HTTP请求,返回一个HTML文件
- 浏览器解析该HTML文件,并且显示在浏览器端
- 这里需要注意:
- HTTP协议是一种基于TCP/IP的应用层协议,进行HTTP数据请求必须先建立TCP/IP连接
- 可以这样理解:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
- 两个计算机之间的交流无非是两个端口之间的数据通信,具体的数据会以什么样的形式展现是以不同的应用层协议来定义的。