Socket和TCP的关系

Socket和TCP的关系

socket、TCP学习记录

开发人员一定都听说过Socket和TCP,但是不一定都有所了解,就像我一样,之前也只是知道有这个东西,但问道具体一点就不知道了。

首先介绍一下TCP

TCP是什么?TCP是一种通信协议,一种面向连接的、可靠的、基于字节流的传输层通信协议。

而我们比较熟知的相关知识点可能就是:三次握手、四次挥手等。

三次握手为例展开讲解,更方便理解TCP和Socket的关系。

1、客户端发送SYN报文给服务器端,进入SYN_SEND状态。

2、服务器端收到SYN报文,回复一个SYNACK报文,进入SYN_RECV状态

3、客户端收到SYNACK报文,回应一个ACK报文,进入Established状态。

三次握手之后,客户端和服务器建立连接,可以开始传输数据了。

但是可以考虑一点,三次握手是在哪里实现的?是操作系统还是应用中?

当然,这是基于操作系统实现的,以Linux为例,所谓的三次握手,就是三个方法,1、tcp_v4_connect2、tcp_v4_send_synack3、tcp_send_ack,既然是Linux的核心方法,我们自然不能直接调用核心方法,那么以我们后端开发的常识来讲,写好了方法,以供外部使用时,肯定是要定义接口的,接口再去调用方法,那么Socket就是相当于我们的接口,Socket本身并不是什么协议,只是供我们方便使用TCP的一个接口而已。

Socket连接,其实也可以理解为TCP连接。

TCP连接的长短连接

什么是TCP的短连接?

例如一个客户端连接服务器,如果是短连接,客户端发送个服务器的请求中,有个参数connection的值为close,服务器收到之后,相应请求,并且在响应报文中同是返回connection为close,当相应完请求之后,会因为connnection为close,服务器端会关掉此次TCP连接,客户端收到响应,将响应内容处理以后,会因为相应中的connection为close,客户端也关闭此次TCP连接,这种便是短连接

什么是TCP的长连接

所谓长连接,也就是在请求连接的时候,传入参数connnection为keep-alive,服务端在处理一次请求之后,连接不会关闭,还可以继续通过此次TCP连接来通信。

不过也有自动关闭连接的情况:

1、maxKeepAliveRequests:TCP连接参数控制,一次Socket(TCP)连接,最多处理几次请求,当请求达到上限时,也会关闭连接。

2、keepAliveTimeout:表示上一次请求到现在的时间的最大值,如果超过这个值,则关闭连接。

关于keepAliveTimeout参数还有另外一个知识点,大家都知道客户端和服务端建立连接后,会发送数据,那么数据会发送到哪里呢?其实服务端是有个缓存区的,服务端可以到缓存区中去读取客户端发送的数据。而服务端会通过while循环,一直去取数据,如果连续一定时间都没有数据,那么也就关闭连接了。

一次HTTP请求的流程

HTTP请求 —> TCP建立连接 ---->发送报文 -----> 解析报文 ----->解析报文行、报文头、报文体 ------>servlet ------>request -----> 服务器端代码处理 ------>返回response

【备注】仅用于学习记录,如果错误或疑问,请指点,谢谢。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值