TCP/IP 协议
什么是 TCP/IP 协议
OSI 七层架构 | TCP/IP 四层模型 | 协议 |
---|---|---|
应用层 | HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS | |
表示层 | 应用层 | XDR、ASN.1、NCP、TLS、ASCII |
会话层 | sockets、SOCKS、PAP | |
传输层 | 传输层 | TCP、UDP、RTP、SCTP |
网络层 | 网络互连层 | IP、ICMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP |
数据链路层 | 网络访问(链接)层 | 以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11 |
物理层 | 调制解调器、无线电、光纤 |
报文结构
TCP 报文段首部格式
源端口和目的端口:各占 2 个字节,分别写入源端口和目的端口。IP 地址 + 端口号就可以确定一个进程地址
序号/序列号(Sequense Number,SN):在一个 TCP 连接中传送的字节流中的每一个字节都按顺序编号。该字段表示本报文段所发送的数据的第一个字节的序号。初始序号称为 Init Sequense Number, ISN(序号/序列号这个字段很重要,大家留个印象,下文会详细讲解) 例如,一报文段的序号是 101,共有 100 字节的数据。这就表明:本报文段的数据的第一个字节的序号是 101,最后一个字节的序号是 200。显然,下一个报文段的数据序号应当从 201 开始,即下一个报文段的序号字段值应为 201。
确认号 ack:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为 N,则表明:到序号 N-1 为止的所有数据都已正确收到。
数据偏移(首部长度):它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。这个字段实际上是指出 TCP 报文段的首部长度。
保留:占 6 位,应置为 0,保留为今后使用。
TCP 三次握手
TCP 四次挥手
TCP/IP 其他问题
- TCP 与 UDP 的区别
(1)TCP:面向连接,可靠的,速度慢,效率低。
(2)UDP:无连接、不可靠、速度快、效率高。
当进程需要传输可靠的数据时应使用 TCP,当进程需要高效传输数据,可以忽略可靠性时应使用 UDP 协议。