当前位置:网站首页>API related to TCP connection
API related to TCP connection
2022-07-05 05:35:00 【Raise items】
List of articles
On establishment and termination
TCP
When connecting , Both ends of the communication will send some messages with Special mark ( Such as SYN
、 ACK
、 FIN
、 RST
) 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 asThe data packet
.
Establishing a connection
Three handshake process :
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 :
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 :
- Send a... To the opposite end
FIN
package . here , The opposite user process will readEOF
, namelyread
The function returns0
. If analogy becomes a read file , This means that you have read the file At the end of . - 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 aRST
message , namely To the end socket Will be reset, And in theRST
Of socket Write operation , It will triggerSIGPIPE
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 .
- Turn off reading : Do not send
FIN
message ; If there is data sent from the opposite end , No reception , Return one to the otherRST
message . - Turn off write : send out
FIN
message , Cannot pass this socket send data . - Turn off reading and writing : Be similar to
close
.
If a socket Of Reference count Greater than
1
,close
It won't close , andshutdown
The corresponding socket.
RST message
When you encounter some abnormal Scene time , The client or server will send a RST
message . These scenes include :
- Customer requests connection , The relevant services are not enabled 、 When it is not present or fails , The customer will receive a
RST
message . - towards Read turned off Of socket When sending data , I'll get one
RST
message .
边栏推荐
- Reflection summary of Haut OJ freshmen on Wednesday
- [jailhouse article] look mum, no VM exits
- YOLOv5添加注意力机制
- 注解与反射
- 个人开发的渗透测试工具Satania v1.2更新
- 数仓项目的集群脚本
- 第六章 数据流建模—课后习题
- CF1634 F. Fibonacci Additions
- Warning using room database: schema export directory is not provided to the annotation processor so we cannot export
- Mysql database (I)
猜你喜欢
Sword finger offer 04 Search in two-dimensional array
从Dijkstra的图灵奖演讲论科技创业者特点
YOLOv5添加注意力機制
Improvement of pointnet++
Light a light with stm32
Yolov5 adds attention mechanism
On-off and on-off of quality system construction
【Jailhouse 文章】Jailhouse Hypervisor
剑指 Offer 05. 替换空格
Solution to the palindrome string (Luogu p5041 haoi2009)
随机推荐
Sword finger offer 53 - I. find the number I in the sorted array
Sword finger offer 05 Replace spaces
A new micro ORM open source framework
Hang wait lock vs spin lock (where both are used)
Light a light with stm32
CF1634 F. Fibonacci Additions
[merge array] 88 merge two ordered arrays
kubeadm系列-01-preflight究竟有多少check
常见的最优化方法
Developing desktop applications with electron
Haut OJ 1243: simple mathematical problems
每日一题-搜索二维矩阵ps二维数组的查找
个人开发的渗透测试工具Satania v1.2更新
Pointnet++的改进
剑指 Offer 35.复杂链表的复制
利用HashMap实现简单缓存
Haut OJ 1347: addition of choice -- high progress addition
Over fitting and regularization
Reflection summary of Haut OJ freshmen on Wednesday
[jailhouse article] jailhouse hypervisor