TCP是传输控制协议,是面向连接的服务,安全,传输速度较慢
安全体现在它的三次握手四次挥手以及响应和重传。
三次握手用通俗易懂的方式来讲即:
A ->B(A向B发了一句:你好,在吗)(其效果是让B知道A能到B)
A<-B(B向A发送:你好,我在,你听得到吗)(其效果是让A知道了A能到B,B也能到A)
A->B(A向B发送:我听的到)(其效果是让B知道B也能到A)
这里为什么不能是两次或者四次呢?
我们要知道这三次让双方都知道了双方都能接受到对方的消息,两次不能让B知道自己是否能到A四次则太多余浪费资源。
四次握手
我们也用通俗的方法来解释即
A->B(发送关闭请求)(我要关闭了,你准备好了吗?)
B->A(发送响应请求)(我下去看一下我有没有好你等我一下)(B查看自己有无未发送完毕的信息)
B->A(我好了,你关闭吧)
A->B(好,我关闭了)
四次挥手主要是为了解决关于信息未发送完毕的情况。
DUP是数据报文协议,是面向无连接服务,相对于TCP来说传输速度较快,不保证安全,可靠,但大多数情况下安全
TCP主要用于安全性要求较高的场景:FTP,SMTP,HTTP
DUP用于流媒体,在线的视频,音频。
TCP的C/S模型
服务器
创建套接字 (int sockfd=socket(AF_INET,SOCK_STREAM,0))
准备地址(struct sockaddr_in addr
(该结构体中有sin_family,sin_port,sin_addr.s_addr),
其中sin_family使用AF_INET,
sin_port使用字节序转化函数
这里我们使用16位本机字节序转换为16位网络字节序sin_port=htons("这里填端口号,要网络连接双方端口号须一致"))
后面sin_addr.s_addr中选择IP地址,既可以是本机地址,也可以是该机所在的局域网的地址。
我们利用socklen_t len=sizeof(addr);
绑定(bind(sockfd,(struct sockaddr)addr,len))(这里sockaddr的强制类型转换是由于我们所设定的是sockaddr_in类型的addr)
监听(listen(sockfd,(数量)))(即监听的数量)
等待连接(accept(sockfd,(struct sockaddr)addr,&len))
接收请求接收在linux中可以使用send和read,send(sockfd ,buf,sizeof(buf),0)(这里的0或1代表阻塞或不阻塞)
响应请求响应在linux中可以使用write和recv,recv(sockfd ,buf,sizeof(buf),0)(这里的0或1代表阻塞或不阻塞)
关闭close
原文:https://www.cnblogs.com/Maoey/p/11336635.html