OSI七层参考模型:
应用层:通过人机交互的界面实现各种各样的服务
表示层:编码 解码 加密 解密
会话层:建立 维持 终止 会话进程
传输层:通过端口号区分不同的服务 数据分段 确认 重传 排序 流控(tcp)
网络层:通过ip地址进行逻辑寻址 路由器
数据链路层:媒介访问控制层 mac 交换机
逻辑链路层 llc 为上层提供fcs校验
物理层:定义电器电压接口规范光学特性

几种常见三层协议
IP 网际网络协议
ICMP 网络控制管理协议 Ping 测试连通性指令
ARP 地址解析协议 把mac地址解析成ip地址

四层协议
TCP 传输控制协议
UDP 用户数据报文协议
Tcp 面向连接的可靠传输协议
Udp 非面向连接的不可靠传输协议

TCP:传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。
特点:
(1)基于流的方式;
(2)面向连接;
(3)可靠通信方式;
(4)在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;
(5)通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。

TPC报头:

源端口和目的端口,各占2个字节,分别写入源端口和目的端口;
序列号:记录发送次数
占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始;
确认号,占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。例如,B收到了A发送过来的报文,其序列号字段是501,而数据长度是200字节,这表明B正确的收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701;
数据偏移,占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远;
保留,占6位,保留今后使用,但目前应都位0;
紧急URG,当URG=1,表明紧急指针字段有效。告诉系统此报文段中有紧急数据;
确认ACK,仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1;
推送PSH,当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这时候就将PSH=1;
复位RST,当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;
同步SYN,在连接建立时用来同步序号。当SYN=1,ack=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ack=1;
终止FIN,用来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放;
窗口,占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受;
检验和,占2字节,校验首部和数据这两部分;
紧急指针,占2字节,指出本报文段中的紧急数据的字节数;
选项,长度可变,定义一些其他的可选的参数。

面向连接:三次握手 四次断开


介绍TCP连接的三次握手
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers);
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手;
补充知识:
未连接队列
在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于SYN_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
TIME_WAIT状态
TIME_WAIT状态存在有两个原因。
<1>可靠终止TCP连接。如果最后一个ACK报文因为网络原因被丢弃,此时server因为没有收到ACK而超时重传FIN报文,处于TIME_WAIT状态的client可以继续对FIN报文做回复,向server发送ACK报文。
<2>保证让迟来的TCP报文段有足够的时间被识别和丢弃。连接结束了,网络中的延迟报文也应该被丢弃掉,以免影响立刻建立的新连接。
追问:为什么需要三次?
TCP是可靠的传输控制协议,三次握手能保证数据可靠传输又能提高传输效率。
如果TCP的握手是两次:
<1>如果client发给server的SYN报文因为网络原因,延迟发送。由于client没有收到server对SYN的确认报文,会重发SYN报文,服务器和回复ACK,连接建立。数据发送完毕,这条连接被正常关闭。这时,延迟的SYN报文发到了server,server误以为这是client重新发送的同步报文,又回复了一个ACK,和client建立了连接。
<2>如果server给client发送的ACK报文因为网络原因,报文被丢弃,此时server认为已经建立好连接,但是client没有收到确认报文,认为没有建立好连接。client会重发SYN报文,此时server已经处于就绪状态,认为已经建立好连接。
如果TCP的握手是四次:
–1.client给server发送SYN同步报文;
–2.server收到SYN后,给client回复ACK确认报文;
–3.server给client发送SYN同步报文;
–4.client给server发送ACK确认报文。
第2.3步之间,server和client没有任何的数据交互,分开发送相当于多发了一次TCP报文段,SYN和ACK标识只是TCP报头的一个标识位。很明显,这两步可以合并,从而提高连接的速度和效率。

介绍TCP断开的四次挥手
1.客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送
2.服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号
3.服务器B关闭与客户端A的连接,发送一个FIN给客户端A
4.客户端A发回ACK报文确认,并将确认序号设置为收到序号加1
为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
拓展问题:
为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
追问:为什么是四次?
TCP是全双工的连接,必须两端同时关闭连接,连接才算真正关闭。 如果一方已经准备关闭写,但是它还可以读另一方发送的数据。发送给FIN结束报文给对方对方收到后,回复ACK报文。当这方也已经写完了准备关闭,发送FIN报文,对方回复ACK。两端都关闭,TCP连接正常关闭。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
可以确保每成功建立一个TCP连接时,来自该连接先前化身的老的重复分组都已经在网络中消逝。

SCTP协议:流控制传输协议是一种在网络连接两端之间同时传输多个数据流的协议。SCTP提供的服务于UDP和TCP类似。

工作过程:
建立连接:
不同于TCP,SCTP通过四次握手来完成连接的建立:
1.连接发起者(一般为客户端)SCTP发送一个INIT消息(初始化)。该消息包括了连接发起者的IP地址清单、初始序列号、用于标识本耦联中所有报文的起始标记、客户请求的外出流的数目以及客户能够支持的外来流的数目
2.对端(服务器)发送一个INITACK消息确认连接发起者的INIT消息,其中含有服务器的IP地址清单、初始序列号、起始标记、服务器请求的外出流的数目、服务器能够支持的外来流的数目以及一个状态cookie,状态cookie包含服务器用于确信本耦联有效所需的所有状态,cookie是经过数字签名的,因而可以确保其有效性
3.客户以一个COOKIEECHO消息返回服务器的状态cookie,除COOKIEECHO外,该消息可能在同一个报文中捆绑一个用户数据
4.服务器以一个COOKIEACK消息确认客户返回的cookie是正确的,到此时该耦联就建立成功了。该消息也可能在同一个报文中捆绑一个用户数据。

断开连接:
与TCP不同,SCTP使用三次握手来关闭一个耦联。而且SCTP不支持TCP所支持的“半关闭”状态。典型的SCTP关闭一个耦联的过程如下
1.应用程序发出关闭请求,SCTP耦联进入SHUTDOWN-PENDING状态,并且不再接收应用程序的数据,只发送队列中还未发送的数据,再队列中没有待发送数据后,发送SHUTWODN并进入SHUTDOWN-SENT状态。这一方被称为主动关闭。
2.执行被动关闭的一方在接收到主动关闭一方的SHUTWODN消息时,进入SHUTDOWN-RECEIVED状态,此时执行被动关闭一方不再接受上层应用的数据,只发送队列中剩余的数据。在发送队列中的数据被发送完后,执行被动关闭一方发送SHUTDOWN-ACK并进入SHUTDOWN-ACK-SENT状态。
3.执行主动关闭一方收到SHUTDOWN-ACK后就发送SHUTDOWN-COMPLETE,并进入CLOSE状态。
4.执行主动关闭一端接收到SHUTDOWN-COMPLETE后就进入close状态。

TCP与SCTP的区别:

  1. TCP是以字节为单位传输的,SCTP是以数据块为单位传输的
  2. TCP通常是单路径传输,SCTP可以多路径传输
  3. TCP是单流有序传输,SCTP可以多流独立有序/无序传输
  4. TCP连接的建立过程需要三步握手,SCTP连接的建立过程需要四步握手
  5. SCTP有heartbeat机制来管理路径的可用性

SCTP相对TCP的优势:
1.SCTP可以多地址链接
2.增加了防止攻击的措施
3.可以同时支持多个流。

TCP/SCTP知识点相关推荐

  1. 最全的TCP面试知识点

    TCP硬核面试题!35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题 前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我 ...

  2. tcp/ip知识点的总结

    知识点搜集于网络,在加上自己的总结,还有很多不全,希望大家多提意见,共享学习! 一.TCP/IP是什么? TCP/IP是一个协议族,而不是单独的协议.包括arp.ip.icmp.tcp.udp.htt ...

  3. [项目管理-22]:项目中开环、闭环、安全、监控四种沟通模型:UDP/TCP/SCTP/PID模型

    目录 前言: 第1章 项目中闭环沟通模型 1.1 沟通模型 1.2 开环沟通 1.3 闭环沟通 1.4 闭环监控式沟通 第2章 TCP/UDP/SCTP通信模型在项目管理中的应用 2.1 UDP模式沟 ...

  4. TCP/IP知识点总结

    目录 1. 网络基础 1.1 IP地址 1.2 子网掩码 1.3 MAC地址 2. 网络设备及使用 2.1 集线器:转发所有端口 2.2 交换机:MAC 地址交换表 + 转发对应端口 2.3 主机:网 ...

  5. 面试笔试--TCP/IP知识点

    下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置: 7 应用层 例如HTTP.SMTP.SNMP.FTP.Telnet.SIP.SSH.NFS.RTSP.XMPP.Whois. ...

  6. TCP/IP 知识点问答(三)

    第五章 1.什么是直接交付和间接交付? 答:直接交付是分组的终点是一台与交付者连接在同一网络上的主机,或是在最后一个路由器与目的主机之间进行交付.间接交付是分组经过一个又一个路由器,最后到达与终点连接 ...

  7. 解析ip分组_快来看看!!!你经常忽略的TCP/IP知识点~

    点击蓝字 关注我们 因特网层协议 在DoD模型中,因特网层的作用有两个:路由选择以及提供单个到上层的网络接口.其他层的协议都没有提供与路由选择相关的功能,这个复杂而重要的任务完全由因特网层完成.因特网 ...

  8. 图解TCP/IP知识点

    一.基础知识 1.协议:语言.通信:聊天.数据:说话内容. 2.分层参考模型 应用层:特定应用协议 表示层:设备固有数据格式和网络标准数据格式的转换 会话层:建立和断开连接 传输层:可靠传输 网络层: ...

  9. 【计算机网络】 0、各网络命令 + tcpdump + Wireshark、抓包实战、TCP 握手挥手、防火墙、保活、MTU

    文章目录 一.各层网络工具 应用层 找到服务器的 IP 查接口.对象的耗时 删除指定网站的Cookie 表示层.会话层 tcpdump.wireshard 传输层 telnet: 路径可达性测试 nc ...

  10. Linux基础shell编程-琐碎知识点

    shell 脚本学习-网络野路子 shell脚本攻略 Linux命令大全(手册)_Linux常用命令行实例详解_Linux命令学习手册 Unix 基础知识 shell知识点_亦乐-可乐的博客-CSDN ...

最新文章

  1. python论坛哪些好-好的python论坛
  2. 与火狐浏览器对应版本_你下载的是原版的火狐浏览器吗?如果不清楚,这篇文章会让你明白...
  3. CentOS防火墙操作实例(启动、停止、开、闭端口)
  4. 地址总线与内存大小的关系(待续…)
  5. idea 注释中 类 跳转_javaSE第一部分 数据类型、idea快捷键
  6. Pravega Flink Connector Table API 进阶功能探秘
  7. mysql定位数据库_MySQL数据库Query性能定位
  8. time 测试一条命令的执行时间
  9. 《深入理解nginx》总结
  10. 计算机科学导论简答题答案题库,计算机科学导论习题答案
  11. 7.Java反射面试题
  12. 普元eos运行环境下的逻辑流及页面流反编译工具
  13. 学习笔记:基于模型的协同过滤推荐算法简述
  14. 连锁门店数字化营销,打造千城万店新零售体系
  15. JAVA8十大新特性详解
  16. python实现Kmeans算法
  17. 【北邮计算机考研】2022年北京邮电大学计算机考研考情分析
  18. HTTP无状态协议到底指的什么?
  19. Cython优化简介
  20. Mermaid知识点总结3 - Flowchart 2

热门文章

  1. android 七彩进度条背景图片,Android编程实现自定义ProgressBar样式示例(背景色及一级、二级进度条颜色)...
  2. 网页打印文档,不弹出浏览器打印对话框设计思路
  3. webwell安全工具-BeEF
  4. 学习Kruskal并用其解决洛谷P1195口袋的天空
  5. 电商等一些互联网项目涉及到什么技术?
  6. java sort 时间排序_java collection.sort()根据时间排序list
  7. [转载]【苹果千层派】轻松玩转酥皮_万金油_新浪博客
  8. Android P init进程reboot流程和调试方法
  9. java之等差素数的求法
  10. pdfptable 设置行间距_table中tr间距的设定table合并单元格 colspan(跨列)和rowspan(跨行)...