美文网首页
socket了解一下

socket了解一下

作者: 灰灰是只小贱狗 | 来源:发表于2018-05-07 16:14 被阅读11次

什么是TCP/IP

TCP:用于应用程序之间的通信。
这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

IP: 用于计算机之间的通信。
是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路,IP 负责将每个包路由至它的目的地。

TCP/IP:意味着 TCP 和 IP 在一起协同工作。
TCP负责应用软件(比如您的浏览器)和网络软件之间的通信。
IP 负责计算机之间的通信。
TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。
IP 负责将包发送至接受者。

IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程
利用:ip地址+协议+端口号唯一标示网络中的一个进程。

什么是socket

socket是进程通讯的一种方式,就是两个进程,跨计算机,他俩需要通讯的话,需要通过网络对接起来。

socket的结构
socket的结构很简单,只有三个元素,协议,端口号,IP地址

socket位于应用层与传输层之间

socket所在层级
Socket通信流程
socket是"打开—读/写—关闭"模式的实现。
socket通信流程
socket通信文字化
1.服务器创建socket
2.服务器为socket绑定ip地址和端口号
3.服务器socket监听端口号请求
4.客户端创建socket
5.客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket
6.客户端连接成功,向服务器发送连接状态信息;服务器accept方法返回,连接成功
7.客户端向socket写入信息;服务器读取信息
8.客户端关闭;服务器端关闭

三次握手

在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接


图解三次握手

第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认

第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

四次挥别

四次挥别

1.客户端发送FIN用来关闭客户端到服务器的数据传输;
2.服务器收到客户端的FIN,发回一个ACK表示收到关闭请求;
3.服务器向客户端发送一个FIN,表示关闭服务器到客户端的数据传输;
4.客户端发回ACK报文确认

因为TCP链接是全双工的,因此每个方向都必须要单独进行关闭。

问题

为什么连接的时候是三次握手,关闭的时候却是四次挥别?
当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

参考

TCP/IP 教程
简单理解Socket
TCP协议中的三次握手和四次挥手

相关文章

  • socket了解一下

    什么是TCP/IP TCP:用于应用程序之间的通信。这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或...

  • Android Socket了解一下

    前段时间做了关于Socket的项目,总结一些在这个过程中学到的东西和需要注意的地方socket 的使用在Andro...

  • PHP Socket 编程实战总结

    在进入 PHP Socket 编程实战之前,我们先来了解一下 PHP Socket 的一些基础知识。 一、基础部分...

  • Socket

    Socket socket是什么 socket是什么?socket在哪?先了解TCP/IP协议 TCP/IP:传输...

  • iOS Socket 简单即时通讯

    本位将简单实现一下循环接受数据的实现.对Socket不做过多解释,了解Socket实现了循环接受数据 www.j...

  • 区分Web Socket、Web Worker和Service

    Web Socket Web Socket是基于TCP的一个全双工通信协议,HTML5的新特性。先了解一下之前通信...

  • ndk开发—用socket实现双进程守护

    前篇 首先我们需要了解一下socket的通信原理,大家百度就可以找到这张图片 java实现socket通信首先服务...

  • iOS开发——轻松学习Socket

    Socket是什么? 要了解什么是 Socket,首先需要了解 TCP/IP、UDP! ? TCP/IP(Tran...

  • iOS即时通讯开发-轻松学习Socket

    Socket是什么? 要了解什么是 Socket,首先需要了解 TCP/IP、UDP! ? TCP/IP(Tran...

  • TCP socket 编程

    TCP socket 编程 讲一下 socket 编程 步骤 使用 socket 模块 建立 TCP socket...

网友评论

      本文标题:socket了解一下

      本文链接:https://www.haomeiwen.com/subject/oftvrftx.html