TCP与socket

TCP与socket

2023年7月15日发(作者:)

TCP与socketIP层只提供包交换,不提供数据传输流机制,属于⽹络层协议TCP:基于IP层,⾯向连接的,可靠的基于字节流的数据传输层协议,传输前会有三次握⼿建⽴连接,四次挥⼿断开连接,传输期间有窗⼝机制,确认机制,重传机制,阻塞机制等保证数据不丢失,容易受到攻击(传输数据),效率低,⽆消息边界,拆包粘包(应⽤层协议规定消息的消息头包含消息开始标识和长度)1.保持长连接不会关闭,服务器保活功能发送探测报⽂2.⼀般关闭都是⾃动关闭UDP:⽆连接的,⽆状态的,不可靠的数据报协议,会有包丢失,不可靠,⽐TCP稍安全,有消息边界(传输数据),包更⼩,速率快,不⼀定不安全(程序员对接收数据⼿动控制验证,⽐如加编号之类的)HTTP:基于TCP的⾯向对象的应⽤层协议,可长连接或短链接(包装数据)。⽆状态(不会保存历史请求数据),⽆连接(每次请求之后结束断开),⼀般会keep-alive,默认保持连接⼀段时间。再同⼀个⽹站再次传输不需要建⽴连接。socket:API接⼝,对TCP/IP,UDP协议进⾏封装,供开发使⽤,可根据设置TCP或者udp来选择协议⽀持。⼀般需要建⽴两个套接字socket,⼀端发送请求,设置地址和端⼝,另⼀端绑定地址和端⼝,监听端⼝,连接完成新建socket处理数据。可新建线程专门处理连接数据,旧的socket负责监听连接队列是对TCP的⽀持。底层有源IP源端⼝,⽬的IP⽬的端⼝,发送缓存队列,接收缓存队列。Socket的写操作先把数据写⼊缓存队列,然后流的⽅式TCP传输,服务端先从缓存读,没数据阻塞。当服务端读缓存队列满的化会TCP控制机制对客户端阻塞停⽌写。建⽴连接先把连接放⼊队列,如果队列满拒绝建⽴连接不发送ACK,客户端超时重发⼀定次数关闭。Accept从连接队列取连接进⾏数据交互。socket基于TCP,连接结束不会关闭,状态保持,⽤于游戏持续保持⽹络畅通,URLConnection基于HTTP,访问⼀次断开,⽆状态,底层也是基于socket。HTTPS(保证安全):在http基础上做了SSL的加密具体逻辑:1.客户端进⾏请求发送⼀套加密算法和hash算法,2.服务端获取到选择⼀种加密,返回证书(包含公钥,⽹站地址,hash等)3.客户端验证证书合法性,选择信任,⽣成⼀个随机数,对随机数进⾏公钥加密,⽤hash计算传输数据,⽤随机数进⾏数据加密4.服务端取出私钥对对随机数进⾏解密取出密码,⽤私钥对信息解密,校验hash值是否⼀致,发送加密信息回客户端5.客户端解密⽐对和⾃⼰hash发送的是否⼀致,是建⽴连接,之后⽤随机数对称加密算法进⾏加密传输三次握⼿:客户端发送SYC(j)消息,服务端收到,发送SYN(j+1)+ACK(k),客户端收到发送ACK(k+1,j+1),建⽴连接不安全,伪造⼤量的SYN请求,导致服务器响应⾼cpu满四次挥⼿:客户端发送完数据,TCP服务器通知应⽤进程A->B的传输中断,不能再发送数据,半关闭状态),发送fin请求关闭连接,服务器回应ACK(,服务器发送FIN告诉客户端数据发完了可以关闭,客户端发送ACK(启动2MSL计时器)告诉服务器FIN收到了,服务器关闭,客户端等待2SML关闭连接。ACK丢包问题:三次握⼿ACK丢包,等待⼀定时间收不到会重传,⼀直收不到会关闭服务器连接,客户端发送数据,服务器响应RST包(强制关闭,告诉客户端我已经关闭了)四次挥⼿ACK丢包会重传,第三次挥⼿服务器发送的FIN包丢失,客户端等待超时重传。客户端发送ACK包丢失,会等待2MSL时间关闭,服务器端收不到ACK包会重传,⼀直收不到会⾃⼰关闭。TIME_WAIT状态时两端的端⼝不能使⽤,要等到2MSL时间结束才可继续使⽤四次挥⼿原因:TCP连接是全双⼯的,数据可以两个⽅向上传输,⼀端半关闭,另⼀端ACK确认,等数据发完再发送FIN为什么等2MSL:客户端假定是不相信⽹络,如果发送失败丢包,服务器重新发送FIN,从客户端发送ACK到服务器重发FIN时间是2SML。另外如果直接关闭,有些IP包路由是缓存的(包括迟到的报⽂,等待2MSL时间保证这些报⽂都到达⽬的地⽆效),再次打开连接可能⽤以前的刚关闭的连接,导致重传的数据包接收到数据错误。TCP 必须防⽌某个连接的重复报⽂在连接终⽌后出现,所以让 TIME_WAIT 状态等待时间⼤于2MSL,连接响应⽅向上的 TCP 报⽂要么完全响应完毕,要么被丢弃。建⽴⼆次连接时,就不会混淆为什么三次握⼿不是两次:如果客户端不发送确认请求,如果第⼀次建⽴连接SYN包由于⽹络阻塞延后到达,客户端以为丢包重发正常,数据交互,释放连接,此时⽹络阻塞的SYN包到达,服务器以为是新的连接请求,如果只有两次握⼿,客户端不会理会服务器的ACK确认包,但是服务器以为连接正常就会⼀直占⽤资源(三次握⼿为了等待确认客户端确实请求连接且收到确认)

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689410136a243527.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信