OSI开放式互联参考模型
发送方层次由上向下,接收方层次由下向上
TCP/IP族 是OSI的实现
网络七层 | 数据格式 | 功能 | TCP/IP协议族 |
---|---|---|---|
应用层 | Data(数据) | 文件传输、电子邮件、文件服务、虚拟终端 | TFTP HTTP SNMP FTP SMTP DNS Telnet |
表示层 | Data(数据) | 数据格式化、代码转换、数据加密 | - |
会话层 | Data(数据) | 建立或解除与别的节点的联系 | - |
传输层 | 分段(数组组织成数据段segment) | 提供端对端的接口 | TCP UDP |
网络层 | 分割重新组成数据包Packet | 为数据包选择路由 | IP ICMP RIP OSPF BCP IGMP |
数据链路层 | 将比特信息封装成数据帧frame | 传输有地址的帧以及错误检测功能 | SLIP CSLIP PPP ARP RARP MTU |
物理层 | 传输比特流 | 以二进制的数据形式在物理媒体上传输数据 | ISO02110 IEEE802 IEEE802.2 |
TCP协议
- 面向连接的、可靠的、基于字节流的传输层通信协议
- 将应用层的数据流分割成报文段并发送给目标节点的TCP层
- 数据包都有序号,对方收到则发送ACK确认,未收到则重试
- 使用校验和来校验数据在传输过程中是否有误
TCP三次握手
握手是为了建立连接,TCP三次握手如下:
(有时候小写的ack也会写成Ack,与ACK不是一个东西)
- 第一次握手的时候SYN=1表示要创建连接同时初始需要seq = x(x可以指代任意数)
- 服务端同意连接发送确认报文SYN=1,ACK=1,seq=y(为自己的确认序列初始一个y),ack=x+1(回应请求的seq)
- 收到服务端确认报文,发送确认报文这时候不需要SYN,只需要ACK=1,seq=x+1,ack=y+1(响应服务端的seq)
总结:
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送SYN包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器端接收到SYN包,必须确认客户端的SYN(ack = x+1),同时自己也发一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务端的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务端进入ESTABLISHED状态完成三次握手。
TCP三次连接是防止客户端如果有一次发送请求超时,然后又重新发送请求到服务端已经处理完,然后服务端在之后一段时间重新收到超时的请求,直接处理。