zoukankan      html  css  js  c++  java
  • socket小解

    要理解socket,首先得理解TCP/IP协议族,

    TCP/IP (Transmission Control Protocol/Internet Protocol)传输控制协议/网间协议

    定义: TCP/IP指的是因特网整个TCP/IP协议族而不是单纯TCP与IP协议的统称,它将所有的TCPIP协议归类到四个抽象层

    应用层: TFTP, HTTTP, SNMP, FTP, SMTP, DNS, Telnet等

    传输层: TCP, UDP

    网络层: IP, OSPF,EIGRP,IGMP

    数据链接层: SLIP,CSLIP,PPP,MTU

    大致如下:

    每一层建立在低一层的服务上,并且为高一层服务

    功能: 定义主机如何连入互联网以及数据如何在它们之间传输的标准

    --------------------------------------------------------------------------------------------------------------------------------------------------------

    socket

    网络中,两个进程要进行通讯一个基本前提上能将其唯一标识,IP的IP地址能唯一标识一个主机,TCP的协议和端口号可以唯一标识主机上的一个进程,因此我们使用ip地址+ TCP协议+ 端口号来唯一标识一个网络进程,

    接下来就能利用socket进行通讯了

    定义: socket是应用层与运输层间的一个抽象层,将TCP,IP层复杂的操作抽象为几个简单的接口供应用层调用来实现网络通信

    socket起源于UNIX,在其“一切皆为文件”思想的影响下,以“打开--读/写--关闭”的模式实现,即服务端与客户端各自维护一个文件,在建立连接后,往自己的文件里写入内容供对方读取或读取对方的信息,

    通讯结束后关闭文件,如下

    解析:

    服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket

    服务器为socket绑定ip地址和端口号

    服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开

    客户端创建socket

    客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket

    服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求

    客户端连接成功,向服务器发送连接状态信息

    服务器accept方法返回,连接成功

    客户端向socket写入信息

    服务器读取信息

    客户端关闭

    服务器端关闭

    三次握手

    在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状态,完成三次握手

    定睛一看,服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手

  • 相关阅读:
    中国剩余定理(SCAUOJ 1077)
    uva 11426 GCD
    LA 4119 Always an integer (数论+模拟)
    uva 12003 Array Transformer (线段树套平衡树)
    uva 10253 Series-Parallel Networks (整数划分+多重集)
    LA 4123 Glenbow Museum
    uva 11361 Investigating Div-Sum Property
    2013多校训练赛第二场 总结
    uva 11174 Stand in a Line (排列组合)
    canvas 画椭圆
  • 原文地址:https://www.cnblogs.com/yanze/p/6065938.html
Copyright © 2011-2022 走看看