一、OSI七层参考模型
应用层 | 应用程序 接收人类传递的一些参数 |
表示层 | 转为二进制 |
会话层 | 建立维持和断开一次会话,PC和服务器之间建立的请求 |
传输层 | 优化传输—实现端对端的传输,为了区分进程和服务,端口号:由二进制构成,16位二进制构成,65536个。0-1023知名端口号,著名端口号,标定了特定的服务。 |
网络层 | IP地址,实现逻辑寻址 |
数据链路层 | (介质访问控制层—MAC)逻辑访问控制层 LLC—物理寻址 |
物理层 | 处理电信号 |
核心:分层---分层的好处;位于同一层的协议或者设备具备相同或者相似的功能,而不同层次之间的协议或者设备,具有明显的差异。
1.更利于标准化
2.降低层次之间关联性。
每一层都提供自身的服务。
每一层都在下层的基础上提供一些增值服务。
二、TCP/IP模型
1、TCP/IP
TCP/IP(传输控制协议/互联网协议),TCP又称网络通讯协议(Transmission Control Protocol)。是由网络层的IP协议和传输层的TCP协议组成,是一个很大的协议集合。
PDU—协议数据单元
2、服务常用端口
3、封装解封装
① 封装:达到某一层次数据之前封装上对应的功能数据,让它执行相应的功能;从高层向低层数据加工处理的一个过程;过程中数据包将不断的变大。
② 解封装:就是封装的一个逆过程, 数据从低层向高层的一个读取过程;过程中数据包将不断的变小。
4、TCP/IP各层传输单位
应用层:数据报文二进制
传输层:数据段 TCP UDP
网络层:数据包 IP协议
数据链路层:数据帧 以太网协议
物理层:比特流
5、TCP与UDP的区别
① TCP是面向连接协议,而UDP是无连接的一种协议。
TCP有三次握手建立连接。
② TCP的传输是可靠的,而UDP的传输是不可靠的。
TCP有排序、确认、超时重传、流控的可靠传输机制。
③ TCP可以进行流控,而UDP不能(滑动窗口机制)。
④ TCP可以进行分段,而UDP不能。
⑤ TCP消耗资源会比较多,传输效率比较低,而UDP消耗资源比较小,传输效率比较高。
⑥ 应用场景不同。
TCP一般运用在对数据可靠性要求比较高,但是对于传输效率要求相对较低 的情况,比如说传输文件/邮件等等。
UDP一般运用在对数据可靠性要求比较低,但是对于传输效率要求较高的情况,比如说 即时通讯,直播等等。
5、TCP报头、UDP报头、IP报头
① TCP报头
② UDP报头③ IP报头
标准为20字节,可扩展到60字节
MTU—最大传输单元,默认情况下规定的大小 数据链路层最大不能超过1500字节
MSS—最大段长度—传输层分段后的数据大小——1460字节=MTU(1600)- IP报头(4X5)- TCP报头(4X5)。
6、TCP的三次握手---建立连接
第一次握手:主机A发送一个SYN包给主机B,将SYN置为1,并且携带一个Seq序号是随机值,如这里Seq=100;
第二次握手:主机B收到主机A的数据包回复一个确认包(ACK),将ACK置为1,并携带携带一个确认序号(ACKnumber)是主机A发送过来的序号+1,如这里ACKnumber=100+1;同时主机B也要向主机A也要发送SYN包,将SYN置为1,且携带一个Seq序号是随机值,如这里Seq=500向主机A进行回复;
第三次握手:当主机A收到主机B确认包(ACK),主机A也会向主机B回复一个ACK,将ACK置为1,并携带携带一个确认序号(ACKnumber)是主机发B送过来的序号+1,如这里ACKnumber=500+1;同时主机A向主机发送一个上次向主机B发送的序号+1;如这里Seq=100+1。
建立三次握手原因:
第一次握手:客户端向服务器端发送报文,说明客户端的发送能力正常;
第二次握手:服务器端接收到报文并向客户端发送报文,说明服务器端的接收能力、发送能力正常;
第三次握手:客户端向服务器发送报文,说明客户端的接收能力正常。
7、TCP的四次挥手---断开连接
第一次挥手:客户端向服务器发送一个FIN报文段,将设置seq为100和ack为110,;此时,客户端进入 FIN_WAIT_1状态,这表示客户端没有数据要发送服务器了,请求关闭连接;
第二次挥手:服务器收到了客户端发送的FIN报文段,向客户端回一个ACK报文段,ack设置为1,seq设置为110;服务器进入了CLOSE_WAIT状态,客户端收到服务器返回的ACK报文后,进入FIN_WAIT_2状态;
第三次挥手:服务器会观察自己是否还有数据没有发送给客户端,如果有,先把数据发送给客户端,再发送FIN报文;如果没有,那么服务器直接发送FIN报文给客户端。请求关闭连接,同时服务器进入LAST_ACK状态;
第四次挥手:客户端收到服务器发送的FIN报文段,向服务器发送ACK报文段,将seq设置为101,将ack设置为111,然后客户端进入TIME_WAIT状态;服务器收到客户端的ACK报文段以后,就关闭连接;此时,客户端等待2MSL后依然没有收到回复,则证明Server端已正常关闭,客户端也可以关闭连接了。