当前位置:网站首页>API related to TCP connection

API related to TCP connection

2022-07-05 05:35:00 Raise items


On establishment and termination TCP When connecting , Both ends of the communication will send some messages with Special mark ( Such as SYNACKFINRST) Message of , and Maintain their respective States .

You can put With special marks And Without data information Of tcp Message as Protocol message ; hold Carry data information Of tcp Message as The data packet .

Establishing a connection

Three handshake process :
 Insert picture description here
TCP The process of establishing a connection is transparent to the user process .
In the process , Client blocked on connect system call , The server is blocked in accept system call .

// #include <sys/types.h>
// #include <sys/socket.h>
int connect(int socket, const struct sockaddr *address, socklen_t address_len);
int accept(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len);

If TCP Connection established successfully ,connect return 0,accept return Connect socket The descriptor ; If the connection fails , All back to -1.

Only after the connection is established 、 Until the termination of , Both parties can send The data packet . in fact , The third handshake , The client can Carrying data Send it to the server .

Terminate connection

The process of terminating the connection is more complicated , Involved API Also more . The initiator of terminating the connection may be either the server or the client , Take client initiation as an example , Four waves :
 Insert picture description here

2MSL Is the longest segmented life span MSL(maximum segment lifetime) Twice as many , This design is to ensure that in When the connection terminates , There is no message related to this connection in the network .

After the first two steps , Get into Half closed state : The client cannot send data to the server , But the server can send data to the client . When the client and the server All in CLOSED state after ,TCP The connection is officially terminated .

have access to close or shutdown Terminate connection , The usage of the two is slightly different .

close

// #include <unistd.h>
int close(int fildes);

close Can do two things :

  1. Send a... To the opposite end FIN package . here , The opposite user process will read EOF, namely read The function returns 0. If analogy becomes a read file , This means that you have read the file At the end of .
  2. Close to socket Of Read and write . Although at this time in FIN_WAIT_2 state , But if there is a data message sent from the opposite end , The local end cannot read , And will return to the other party a RST message , namely To the end socket Will be reset, And in the RST Of socket Write operation , It will trigger SIGPIPE The signal ( The default behavior is Process exits directly ). Cannot pass the current socket send data .

shutdown

// #include <sys/socket.h>
int shutdown(int socket, int how);

shutdown The function will choose to close the pair socket read Write perhaps Reading and writing .

  1. Turn off reading : Do not send FIN message ; If there is data sent from the opposite end , No reception , Return one to the other RST message .
  2. Turn off write : send out FIN message , Cannot pass this socket send data .
  3. Turn off reading and writing : Be similar to close.

If a socket Of Reference count Greater than 1,close It won't close , and shutdown The corresponding socket.

RST message

When you encounter some abnormal Scene time , The client or server will send a RST message . These scenes include :

  1. Customer requests connection , The relevant services are not enabled 、 When it is not present or fails , The customer will receive a RST message .
  2. towards Read turned off Of socket When sending data , I'll get one RST message .
原网站

版权声明
本文为[Raise items]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140621236213.html