美文网首页
Socket相关知识

Socket相关知识

作者: 程序员的自我救赎 | 来源:发表于2019-06-26 17:37 被阅读0次

1、TCP流程图


socket3.jpg

2、UDP流程图


733402-20160107203736371-2068566086.png
3、网络中进程之间如何通信?
本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:
消息传递(管道、FIFO、消息队列) 
同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 
共享内存(匿名的和具名的) 
远程过程调用(Solaris门和Sun RPC) 

4、什么是Socket?
网络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

5、socket的基本操作

socket()函数 
bind()函数 
listen()、connect()函数 
accept()函数 
read()、write()函数等 
close()函数 

6、简述TCP/IP的分层


2964446-1fd7a0f3216c0530.jpg

7、简述TCP的三次握手与四次挥手

(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

简单来说,就是

1、建立连接时,客户端发送SYN包(SYN=i)到服务器,并进入到SYN-SEND状态,等待服务器确认

2、服务器收到SYN包,必须确认客户的SYN(ack=i+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN-RECV状态

3、客户端收到服务器的SYN+ACK包,向服务器发送确认报ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务器开始传送数据。
2964446-aa923712d5218eeb.png
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
2964446-2b9562b3a8b72fb2.png

8、为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

一、保证TCP协议的全双工连接能够可靠关闭
二、保证这次连接的重复数据段从网络中消失

相关文章

  • Socket相关知识

    Socket Socket又称"套接字” 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为...

  • Socket相关知识

    1、TCP流程图 2、UDP流程图 4、什么是Socket?网络中的进程是通过socket来通信的,那什么是soc...

  • iOS socket相关知识

    socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息...

  • Socket网络相关知识

    Socket网络相关知识 端口号(用来定位程序),有效端口065535其中01024是被系统使用或者保留的端口. ...

  • socket(掌握环信的前提,也是即时通讯的底层的实现)

    1.Socket简介 Socket 又称为"套接字",,它与网络相关,学网络必学的一个知识 网络上的两个程序通过一...

  • python编写简单聊天程序

    socket模块相关的方法和类 socket.socket():返回一个 socket对象。 socket.cre...

  • 0. Socket学习资料汇总

    Socket理论知识 iOS Socket理论知识 关于iOS socket都在这里了 iOS Socket T...

  • php socket函数

    socket相关函数: socket_accept() 接受一个Socket连接socket_bind() 把so...

  • 二、Socket网络编程快速入门

    这是一个Socket网络编程的专题,将会讲解一些Socket相关的知识(TCP/UDP等),实现一个聊天室功能的项...

  • Socket相关

    Socket定义Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口。 Socket通信流程

网友评论

      本文标题:Socket相关知识

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