(高三层)
应用层:为应用进程提供网络服务。
表示层:数据格式转换、加密、压缩等。
会话层:建立、管理、终止应用进程之间的会话和数据交换。
传输层:TCP、UDP
(低三层)
网络层:网络路由选择、流量控制。(IP)
链路层:校验、确认、反馈、重发等机制保障数据传输稳定。
物理层:原始比特流的传输介质。(010101)
高三层通常我们也会看作一个应用层,高三层的功能通常被应用服务器实现,例如tomcat、nginx等
传输层主要定义了传输的协议,如TCP或者UDP,我们做应用开发基本也是只关注到这一层。
TCP三次握手
三次握手的本质含义并不是打通网络关系,(网络关系本来就是通的)
是让客户端和服务端互相确认一下网络是否有问题,是否可以互相收发数据的过程。
TCP是一种传输协议,具体通过数据报文的格式和参数规定。TCP报文中有几个标志位需要了解一下:
ACK:请求连接的序号
SYN:建立连接
FIN:关闭连接
过程:
1)客户端 发起请求,等待确认:
SYN_SEND: SYN=1,seq=x
2)服务端 收到请求,响应信息,等待确认:
SYN_RECV: SYN=1, ACK=1, seq=y, ack_seq=x+1
3)客户端 收到请求,响应信息,通知服务端,建立连接:
ESTABLISHED: ACK=1, seq=x+1, ack_seq=y+1
4)服务端 建立连接
ESTABLISHED
TCP四次挥手
1)客户端 发起请求 等待确认:
FIN_WAIT_1: FIN=1, seq=u
2)服务端 收到请求,响应信息,处理善后(半关闭):
CLOSE_WAIT: ACK=1,seq=v, ack_seq=u+1
3)客户端 收到请求,等待关闭:
FIN_WAIT_2
4)服务端 发起请求,通知可以关闭,等待确认:
LAST_ACK: FIN=1, ACK=1, seq=w, ack_seq=u+1
5)客户端 收到请求,响应信息,等一会就关闭
TIME_WAIT: ACK=1, seq=u+1, ack_seq=w+1
6)服务端 关闭
CLOSE
7)客户端 关闭
CLOSE
如果很难理解那换个场景,一对热恋男女说晚安的故事:
男(客户端):不早了你赶紧睡吧。
女(服务端):好的我去洗漱然后就睡。
男(客户端)傻傻的等。
女(服务端):我要睡了,你也赶紧睡吧。
男(客户端):嗯,你先睡,我稍后就睡。
女(服务端)安静的睡着了。
男(客户端):呼呼的睡着了。
UDP
UDP的报文比TCP简单,首部开销小。
UDP无需建立连接,也没有连接状态,只要知道目标端口就可以发送,至于收没收到不关心...
和TCP相比UDP更快,资源占用更小,但是不可靠。
UDP适合对数据可靠性要求不高的场景或者实时场景,比如直播,视频,音频,及时更新数据。
Socket
通常我们网络编程都是用的Socket的api,Socket有面向tcp的或者udp的,也有直接面向网络层的接口。
网友评论