关于TCP三次握手
服务器端被动打开,监听客户端的连接,客户端主动打开。
1.client发送一个SYN包给server(包含一个随机数A)。
2.server收到client的SYN包后发送一个ACK包(发送A+1)确认收到正确无误的包,同时发送一个SYN包(包含一个随机数B)。
3.client发送一个AC包(B+1)确认收到。
关于套接字
根据UNIX系统的设计哲学:一切皆文件。设计套接字的目的是使网络数据的传输像文件读写一样,提供一致的使用体验。
套接字初始化需要三个参数:
通信的目的IP地址,IP地址用来标识网络中计算机(传输层)。
传输层协议(TCP/UDP)。
端口号,端口号用来表示同一台计算机中的进程(应用层)。
要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端,称之为ClientSocket,另一个运行于服务器端,称之为serverSocket。
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客 户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
建立套接字后,Host A中的Program A 先把数据给socket,再由套接字经网卡封装成TCP/IP数据包传给Host B后将TCP头部剥离后传给socket,最后由socket传给Program B.