Linux网络编程一、tcp三次握手,四次挥手
一、TCP报文格式
(图片来源网络)
SYN:请求建立连接标志位
ACK:应答标志位
FIN:断开连接标志位
二、三次握手,数据传输,四次挥手
(流程图,图片来源于网络)
(tcp状态转换图,图片来源于网络)
1、客户端向处于监听状态(LISTEN)的服务端发送请求连接的报文。此时,报文中SYN标志位为1(表明其为请求建立连接的报文),同时还会随机生成一个32位的随机序号(图中1000),请求连接的报文可以可以携带数据(图中(0)表明没有携带数据)。客户端变为SYN_SENT状态。
2、服务器接受到客户端发来的连接请求。服务器检测SYN是否为1,如果是,服务器发送发送报文,并发起一个连接请求。报文中ACK标志位为1,SYN为1(向客户端发起连接请求),同时还会随机生成一个32位的随机序号(图中为8000)和32位的确认序号(图中为1001,1001=客户端请求连接的随机序号1000+SYN标志位为1+数据大小为0),32位的确认序号和ACK标志位为1共同表明收到了客户端的连接请求。服务端由LISTEN状态变为SYN_RCVD。
3、客户端接收到服务端发来的报文。客户端检测ACK标志位是否为1,并且校验32位的确认序号是否正确。如果是,客户端向服务端发送确认报文。客户端由SYN_SENT状态变为ESTABLISHED状态。服务端接收到客户端发来的确认报文,检测ACK标志位是否为1,并且校验32位的确认序号是否正确。如果是,服务端由SYN_RCVD状态变为ESTABLISHED状态。至此完成三次握手。
4、客户端向服务端发送数据(图中数据大小为20)。报文中32的序号为对方最后发送 ACK的时候携带的确认序号,此时报文中ACK标志位为1,32位的确认序号为第三次握手时向服务端发送的确认序号。
5、服务端接收到客户端发来的数据。校验数据编号、ACK标志位和32位确认序号后。服务端向客户端发送数据(图中大小为10)。
6、客户端接收到来自服务端的数据,校验无误后,如果有数据发送则重复4,如果没有则只向服务端发送确认报文。至此完成数据传输。
7、客户端向服务端发送断开连接的请求,报文中FIN标志位为1(表明为请求断开连接的报文)。32序号、ACK、确认序号同前所述。客户端状态变为FIN_WAIT_1。
8、服务端接收到客户端断开连接的请求(服务端状态变为CLOSE_WAIT),服务端发送确认报文。客户端接收到后状态变为FIN_WAIT_2。至此客户端断开了与服务端的连接,服务端没有断开和客户端的连接。此时服务端和客户端处于半关闭状态,即服务端可以向客户端发送数据(没有断开连接),客户端不可以向服务端发送数据(断开了连接)。
9、服务端向客户端发送断开连接的请求(服务端状态变为LAST_ACK),客户端接收后状态变为TIME_WAIT。
10、客户端向服务端发送确认报文。至此服务端断开了与客户端的连接,四次挥手完成,双方断开连接。
Linux网络编程一、tcp三次握手,四次挥手的更多相关文章
- [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解
一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...
- 网络 TCP三次握手,四次挥手详解
三次握手,四次挥手可以说是炙手可热的面试题了,来看看它究竟长什么样子吧! 我们先把流程图贴上来 : 为什么这么复杂? 因为TCP是可靠性传输. 确认可靠传输的前提: TCP连接管理机制 用TCP首部 ...
- tcp三次握手四次挥手那些事
建立TCP需要三次握手才能建立,而断开连接则需要四次挥手.三次握手,四次挥手流程图如下: 一.首先看下如何通过三次挥手----------建立连接 首先客户端发送连接请求报文,服务端接受连接后回复AC ...
- TCP三次握手四次挥手,通俗易懂版
三次握手四次挥手 三次握手 其实很好理解,三次握手就是保证双手都有发送和接受的能力.那么最少三次才能验证完成 即----> 客户端发送---服务端收到----服务端发送-- 1.客户端发送 -- ...
- 网络编程之TCP三次握手与四次挥手、基于TCP协议的套接字编程
目录 TCP三次握手和四次挥手 背景描述 常用的熟知端口号 TCP概述 TCP连接的建立(三次握手) TCP四次挥手 如果已建立连接,客户端突然断开,会怎么办呢? 基于TCP协议的套接字编程 什么是S ...
- 网络编程之TCP三次握手,四次断开
目录 TCP三次握手 1:上图的名词解释 2:TCP三次握手过程 3:为什么不能改成两次握手? TCP三次握手 1:上图的名词解释 SYN:同步序号.它表示建立连接.TCP规定SYN=1时不能携带数据 ...
- TCP三次握手四次挥手详解
转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...
- wireshark抓包直观图解 TCP三次握手/四次挥手详解
转http://www.seanyxie.com/category/linux/ 作者:seanyxie | 一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负 ...
- TCP三次握手/四次挥手
TCP 三次握手 TCP 连接是通过三次握手进行初始化的.三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程: 1. ...
- TCP三次握手四次挥手详解2
相对应socket开发者,TCP创建过程和连接拆除过程是由TCP/IP协议栈自动创建的,因此开发者并不需要控制这个过程,但是对于理解TCP底层运作机制,相当有帮助 TCP三次握手 所谓三次握手,是指建 ...
随机推荐
- C# 定义热键
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 解决sql "Compatibility_199_804_30003" 和 "SQL_Latin1_General_CP1_CI_AS" 之间的排序规则冲突。
关联条件加 COLLATE Compatibility_199_804_30003
- mysql 批量 insert 数据丢失问题
这两天发现mysql 批量insert 比如600条数据后,页面马上select就查询到580条,但是等几秒钟再查询就有600条(也有部分情况是永久只能查到580条了) 查看mybatis的日志发现循 ...
- Python自制小时钟,并转换为exe可执行程序详解
一,简介Python写完程序,要靠命令来执行太LOW,太低调了,还不华丽了. 再说别人的电脑,都没有Python库,怎么执行,还能不能愉快的一起玩耍了. 所以哪怕只会写一个HelloWorld,也要弄 ...
- JVM类加载机制和内存模型
一.JVM类加载机制 首先需要了解一下类加载器(ClassLoader): ClassLoader是Java的一个核心组件,它主要作用是从系统外部获得Class二进制数据流,然后将数据流装载到系统,交 ...
- 移动端h5+vue失焦搜索,ios和android兼容问题
html部分: <input type="search" :placeholder="placeholder" v-model="searchN ...
- 基于Dockerfile搭建JAVA Tomcat运行环境
前言 在第一篇文字中,我们完全人工方式,一个命令一个命令输入,实现一个java tomcat运行环境,虽然也初见成效,但很累人.如果依靠依靠脚本构建一个Tomcat容器实例,一个命令可以搞定,何乐而不 ...
- Delphi 音频播放
樊伟胜
- Hadoop_09_HDFS 的 NameNode工作机制
理解NameNode的工作机制尤其是元数据管理机制,以增强对HDFS工作原理的理解,及培养hadoop集群运营中“性能调优” “NameNode”故障问题的分析解决能力 1.NameNode职责: H ...
- Linux 命令配置IP
配置静态IP:ip addr add 192.168.18.18/24 dev eth0 启动网卡:ifup eth0/ifup ifcfg-eth0 添加默认网关路由:ip route add de ...