Java 多线程与 Socket 实战微服务框架 阅读笔记(三)

 

                                                   TCP/IP 四层模型和 OSI 七层网络模型对应表
OSI 七层网络模型 TCP/IP 四层模型 对应的网络协议
应用层(Application) 应用层 HTTP、TFTP、FTP、NFS、WAIS
表示层(Presentation) Telnet、SNMP、Gopher
会话层(Session) SMTP、DNS
传输层(Transport) 传输层 TCP、UDP
网络层(Network) 网际层 IP、ICMP、ARP、RARP、AKP、UUCP
数据链路层(Data Link) 网络接口层 FDDI、Ethernrt、ARPANET、PDN、SLIP、PPP
物理层(Physical) IEEE 802.1 ~ IEEE 802.11

    在 TCP/IP 四层模型中,应用层向传输层发送字节数据流,由传输层根据 TCP 协议,把数据流拆分成若干网络传输数据报文并编号后交给网际层,经由网络接口层最终发送给接收方的传输层。传输层通过给报文编号,保证了包的发送和接收顺序一致且不丢包。一旦发现顺序不对或者包丢失问题,就要求对方重传。

 

TCP 和 UDP 的区别

    ① TCP 是面向连接的,UDP 是面向无连接的

    ② UDP 程序结构较为简单

    ③ TCP 是面向字节流的,UDP 是面向数据报的

    ④ TCP 保证数据的正确性,UDP 可能丢包

    ⑤ TCP 保证数据顺序,UDP 不保证

 

Socket 状态  

    参考: https://blog.csdn.net/seaSkyOK/article/details/79929525

    客户端:

        ① SYN_SEND    在发送连接请求后等待匹配的连接请求

        ② FIN_WAIT1    等待远程 TCP 的连接中断请求,或先前的连接中断请求的确认

        ③ FIN_WAIT2    从远程 TCP 等待连接中断的请求

        ④ CLOSING    等待远程 TCP 等待连接中断请求

        ⑤ TIME_WAIT    等待足够的时间以确保远程 TCP 接收到连接中断请求的确认

    服务端:

        ① LISTEN    侦听来自远方 TCP 端口的连接请求

        ② SYN_RCVD    在收到和发送一个连接请求后等待对连接请求的确认

        ③ CLOSE_WAIT    等待从本地用户发来的连接中断请求

        ④ LAST_ACK    等待原来发向远程TCP的连接中断请求的确认

    共有的:

        ① CLOSED    没有任何连接状态

        ② ESTABLISHED    代表一个打开的连接,数据可以传送给用户

   

TCP建立连接三次握手

① 客户端先向服务端发送 SYN 包(Socket 状态从 CLOSED 变为 SYN-SEND)

② 服务端收到此 SYN 包后(Socket 状态从 LISTEN 变为 SYN-RECV),向客户端发送此 SYN 包的 SYN/ACK 包,以确认收到了这个 SYN 包

③ 客户端收到 SYN/ACK 包后(Socket 状态从 SYN-SEND 变成 ESTABLISHED),再向服务端发送针对此 SYN/ACK 包的 ACK 包

④ 服务端收到此 ACK 包后(Socket 状态从 SYN-RECV 变成 ESTABLISHED),连接建立成功,双方可以开始收发数据

你可能感兴趣的:(socket,学习)