美文网首页
socket了解一下

socket了解一下

作者: 灰灰是只小贱狗 | 来源:发表于2018-05-07 16:14 被阅读11次

    什么是TCP/IP

    TCP:用于应用程序之间的通信。
    这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

    IP: 用于计算机之间的通信。
    是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路,IP 负责将每个包路由至它的目的地。

    TCP/IP:意味着 TCP 和 IP 在一起协同工作。
    TCP负责应用软件(比如您的浏览器)和网络软件之间的通信。
    IP 负责计算机之间的通信。
    TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。
    IP 负责将包发送至接受者。

    IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程
    利用:ip地址+协议+端口号唯一标示网络中的一个进程。

    什么是socket

    socket是进程通讯的一种方式,就是两个进程,跨计算机,他俩需要通讯的话,需要通过网络对接起来。

    socket的结构
    socket的结构很简单,只有三个元素,协议,端口号,IP地址

    socket位于应用层与传输层之间

    socket所在层级
    Socket通信流程
    socket是"打开—读/写—关闭"模式的实现。
    socket通信流程
    socket通信文字化
    1.服务器创建socket
    2.服务器为socket绑定ip地址和端口号
    3.服务器socket监听端口号请求
    4.客户端创建socket
    5.客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket
    6.客户端连接成功,向服务器发送连接状态信息;服务器accept方法返回,连接成功
    7.客户端向socket写入信息;服务器读取信息
    8.客户端关闭;服务器端关闭

    三次握手

    在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接


    图解三次握手

    第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认

    第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

    四次挥别

    四次挥别

    1.客户端发送FIN用来关闭客户端到服务器的数据传输;
    2.服务器收到客户端的FIN,发回一个ACK表示收到关闭请求;
    3.服务器向客户端发送一个FIN,表示关闭服务器到客户端的数据传输;
    4.客户端发回ACK报文确认

    因为TCP链接是全双工的,因此每个方向都必须要单独进行关闭。

    问题

    为什么连接的时候是三次握手,关闭的时候却是四次挥别?
    当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文。

    为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
    我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

    参考

    TCP/IP 教程
    简单理解Socket
    TCP协议中的三次握手和四次挥手

    相关文章

      网友评论

          本文标题:socket了解一下

          本文链接:https://www.haomeiwen.com/subject/oftvrftx.html