学计算机网络必须要知道的TCP/IP协议,我用我在毕业设计中,思考并解决的一个问题,来解释这个过程。首先我想举个例子:
当你向某人说话的时候,如果不加标点符号,就会变成下面这样
网络通信也是这样,你需要向你想发送的对方,告诉他,我是谁(打招呼),我说了什么(内容),说话完毕(结尾),于是我在自己设计的C/S模式的棋牌游戏里加入这样的消息格式
|10001|35|7359|7709|username|password|10001|
上面的消息格式解释起来就是,消息的开头是10001,表示为登陆消息(自己规定的),35表示后面的消息长度为35,而且消息的结尾也是10001表示该条消息结束,由7359发送给7709对象,35数字之和的消息内容第三段是账号,第四段是密码,这样就是完整的一条消息
然后我们来对比一下TCP报文段结构
在这里插入图片描述
10001是我自己定义的,就类似开场白,告诉对方,这次谈话我要开始了,而且谈话的内容是登陆消息,让对方准备好,然后告诉对方本次谈话的时间长度是35,而且是我和你谈,谈话内容是账号和密码,最后再次告诉对方10001,表示本次谈话结束。
TCP被称为是面向连接的,这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须相互“握手”,即它们必须相互发送某些预备报文,以建立确保数据传输的参数。作为TCP连接建立的一部分,连接的双方都讲初始化与TCP连接相关的许多TCP状态变量。
三次握手
客户首先发送一个特殊的TCP报文段,服务器用另一个特殊的TCP报文段来响应,最后,客户再用第三个特殊报文段作为响应。前两个报文段不承载“有效载荷”,也就是不包含应用层数据;而第三个报文段可以承载有效载荷。由于这两台主机之间发送了3个报文段,所以这种连接建立过程常被称为三次握手。
四次挥手
客户应用进程发送一个关闭连接命令。这会引起客户TCP向服务器进程发送一个特殊的TCP报文段。这个特殊的报文段让其首部中的一个标志位即FIN比特被置为1。当服务器接收到该报文段后,就向发送方回送一个确认报文段。然后服务器发送它自己的终止报文段,其FIN比特被置为1.最后,该客户对这个服务器的终止报文段进行确认。此时,在两台主机上用于该连接的所有资源都被释放了。
序列号seq
Sequence Number
确认号ack
Acknowledgement
确认ACK
同步SYN
Synchronize Sequence Numbers
终止FIN
Finish
共同学习,写下你的评论
评论加载中...
作者其他优质文章