b. 建立套接字连接
建立Socket连接至少需要一对套接字,其中一个在客户端运行,称为ClientSocket,另一个在服务器端运行,称为ServerSocket.
套接字之间的连接过程分为三个步骤: 服务器监视,客户端请求和连接确认.
服务器监视: 服务器端套接字未找到特定的客户端套接字,但是处于等待连接的状态,实时监视网络状态,等待客户端的连接请求.

客户端请求: 是指客户端的套接字发出连接请求,并且要连接的目标是服务器端套接字. 为此,客户端的套接字必须首先描述其所连接的服务器的套接字,指示服务器上套接字的地址和端口号,然后向服务器上的套接字发出连接请求.
连接确认: 当服务器端套接字侦听或接收到客户端套接字连接请求时,它将响应客户端套接字请求,建立新线程,并连接服务器端套接字. 一旦客户确认了描述,双方就正式建立了联系. 服务器端套接字继续处于侦听状态,并继续从其他客户端套接字接收连接请求.
c,套接字连接和TCP连接
创建套接字连接时,可以指定使用的传输层协议. 套接字可以支持不同的传输层协议(TCP或UDP). 使用TCP协议进行连接时,套接字连接是TCP连接.
d,套接字连接和HTTP连接
由于套接字连接通常是TCP连接,因此一旦建立套接字连接,通信的双方就可以开始相互发送数据内容,直到双方之间的连接断开为止. 但是,在实际的网络应用中,客户端和服务器之间的通信通常需要通过多个中间节点,例如路由器,网关,防火墙等. 默认情况下,大多数防火墙会关闭长时间不活动的连接,导致套接字连接断开. 连接,因此您需要通过轮询告诉网络该连接处于活动状态.
HTTP连接使用“请求-响应”方法. 不仅需要在请求时建立连接,而且客户端还需要向服务器发送请求,然后服务器才能回复数据.
在许多情况下,服务器需要主动将数据推送到客户端,以保持客户端和服务器数据的实时性和同步性. 此时,如果双方建立了Socket连接,则服务器可以直接将数据传输到客户端;如果双方建立了HTTP连接,则服务器需要等待客户端发送请求,然后再将数据发送回客户端. 因此,客户端会定期向服务器发送连接请求,不仅可以保持联机状态,还可以向服务器“询问”是否有新数据,如果有,则将数据传递给客户端.
tcp和udp之间的区别
TCP是面向连接的,可靠的传输(保证数据准确性和数据序列),用于传输大量数据(流模式),速度慢,建立连接需要更多的开销(时间,系统资源).
TCP是一种流模式协议,它是面向连接的. 也就是说,在持续连接的过程中,套接字中接收到的数据是由同一主机发送的(不考虑被劫持的东西),因此,只要知道保证数据按顺序到达就足够了,每次读取多少数据都没有关系.
TCP: 面向连接的可靠传输(保证数据准确性和数据序列),用于传输大量数据(流模式),速度较慢和更多开销(时间,系统资源)以建立连接.
UDP: 用于非连接,不可靠的传输,少量数据传输(分组模式),速度快.
关于TCP是流模式下的协议,UDP是数据报模式下的协议,这里解释一下,TCP是面向连接的,也就是说,在连续连接的过程中,接收到的套接字数据是由相同的发送主机(不考虑被劫持的东西). 因此,知道每次读取多少数据就足以保证数据按顺序到达.
并且UDP是无连接协议,也就是说,只要知道接收端的IP和端口并且网络可访问,任何主机都可以将数据发送到接收端. 此时,如果您一次可以读取多条消息的数据,则将导致混乱. 例如,主机A发送消息P1,主机B发送消息P2. 如果可以读取多个消息的数据,则P1和P2的数据将合并在一起. 这样的数据是没有意义的. 的.
TCP三向握手和四次挥动的手
与SOCKET开发人员相比,TCP创建过程和连接断开过程由TCP / IP协议栈自动创建. 因此,开发人员无需控制此过程. 但这对理解TCP的基本运行机制很有帮助.
所以在这里详细解释这两个过程.
TCP三向握手
所谓的三向握手意味着在建立TCP连接时,客户端和服务器总共需要发送3个数据包.
三向握手的目的是连接到服务器的指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息. 在套接字编程中,客户端执行connect(). 将触发三个握手.

TCP Three-way handshake.png
首先了解一些符号,即SYN(同步),同步符号,ACK(确认),即确认符号seq应该是序列号,序列号的含义,最后还有四个握手鳍,应该是final,指示结束符号.
第一次握手: 客户端发送一个TCP数据包,该数据包的SYN标志位置1指示客户端要连接的服务器端口,并且初始序列号X存储在数据包的序列号字段中标头.
第二次握手: 服务器发送回确认数据包(ACK)响应. 也就是说,SYN标志位和ACK标志位都同时为1,将确认号(确认号)设置为客户的序列号加1,即X +1.

第三次握手: 客户端再次发送确认数据包(ACK). SYN标志为0,ACK标志为1. 然后将服务器发送的ACK的序列号字段设置为+1,并将其发送到确定字段中的另一方. 并将序列号+1放入数据段中.
tcp挥手四次
TCP连接的删除需要发送四个数据包,因此称为四次握手. 客户端和服务器都可以在套接字中主动发起一系列操作
在编程中,任何一方都执行close()操作以生成wave操作.

TCP挥手四次. png
其实有个问题,为什么连接的时候是三次握手,关闭的时候却是四次挥手?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的
三个握手,四个波浪,详细说明
tcpsocket和udpsocket的特定实现
tcp和udp的套接字不同. 这是两个设计框架
TCP客户端服务器编程基本框架

TCP服务器客户端design.jpg
基本UDP客户端-服务器编程基本框架流程图

UDP服务器客户端design.jpg
套接字有两种常见的类型: 流套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM). 流是面向连接的套接字,旨在用于面向连接的TCP服务应用程序. 数据报类型的Socket是无连接Socket,对应于无连接UDP服务应用程序.
SYN(同步)是TCP / IP建立连接时使用的握手信号. 当客户端和服务器之间建立正常的TCP网络连接时,客户端首先发送SYN消息. 服务器以SYN + ACK进行响应,以表示它已接收到该消息,最后,客户端以ACK消息进行响应. 这样,可以在客户端和服务器之间建立可靠的TCP连接,并且可以在客户端和服务器之间传输数据.
ACK(确认),即确认字符,是数据通信中从接收站发送到发送站的一种传输控制字符. 表示已确认已正确接收发送的数据
PID(进程标识)是指进程标识号,即进程标识符. 操作系统中的每个打开的程序都会创建一个进程ID或PID.

屏幕截图2017年5月30日上午11.09.51.png
参考
插座
名词解释
node.js安装
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-167435-2.html
他的声音真的很棒
帅帅帅
小王子
电量耗的真快