TCP/IP协议栈基础知识
设计思想
把一个复杂的事物进行分层划分,使得每个部分变得相对简单
分层模型
OSI分为7层模型 tcp/ip分为四层模型
应用层(Application)
传输层(Transport)
网络层(Internet)
网络访问层(Network Access)
TCP特性
1.工作在传输层
2.面向连接协议
在通讯的过程中有一个协商的过程,需要确保两者之间有一个稳定的,可靠的连接状态.
3.全双工的协议
可以同时双向发送数据
4.半关闭
关闭是单方向的 一方关闭连接只表示关闭方不再发送数据,但不代表不接收对方的数据包.
5.错误检查
6.将数据打包成段,排序
7.确认机制
8.数据恢复,重传
9.流量控制,滑动窗口
10.拥塞控制,慢启动和拥塞避免算法
TCP包头
0-15 16个位 2个字节 表示源端口 2^16 = 65536个端口号
16-31 16个位 2个字节 表示目标端口
32位 4个字节 表示当前本机发送数据包的编号
32位 4个字节 表示确认号 标识对方主机发送的数据包的编号 告诉对方主机下次需要发送数据包的编号
4位 数据偏移 表示tcp包的头部有多长
前面固定有20个字节的长度 + 不固定长度的选项长度
三个重点标记位: 实现TCP可靠传输的关键
ACK 确认接收标志
SYN 同步请求标志
客户端向服务端发送第一个连接TCP数据包的时候会把SYN变成1
服务端响应客户端发送的连接第一个TCP包头中的SYN也等于1
FIN 结束连接标志
使用tcp发送数据之前,必须先通过三次握手 然后才能进行数据的发送和接收
TCP三次握手
第一次握手: 客户端给服务端发送第一个同步消息把SYN设为1
第二次握手: 服务端给客户端发送回应的消息把SYN设为1 ACK设为1 表示服务端能正常接收客户端的数据包
第三次握手: 客户端回应服务端消息把ACK设为1 表示客户端能正常接收服务端的数据包
1.客户端 SYN 2.服务端 SYN ACK 3.客户端 ACK

TCP四次挥手
1.建立连接一般是由客户端首先向服务器端发起请求的,服务器端只进行监听.
2.但是断开连接的分手请求可以是任意方(可以是客户端也可以是服务端)来首先发起的,谁先把数据传输完成,谁就可以发送断开连接请求的数据包
3.首先发送FIN=1的一方 表示自己不再会向对方发送任何数据,但是还会接收对方发送过来的数据 (半关闭的特性)
4. 2MSL时间表示是消息的最大生存期 1个MSL表示两个数据包正常发送的时间
5.首先提出断开连接方最后需要等待2MSL的时间是因为理论上对方会先把还没发完的数据先发给自己最后才会发送FIN=1的数据包,但是
每个数据包在传递的过程中选择的路径是不一样的,可能会出现数据包先发后到的情况.
这段时间是用来接收可能在FIN=1包到达后其它还没有到达本机的数据包.
6.A FIN B ACK B FIN A ACK

TCP的SYN(同步攻击)
当客户端向服务端首先发起一个SYN的同步消息后,服务器会立刻向客户端返回ACK消息同时等待客户端返回ACK消息.
在服务器等待客户端ACK消息的这段时间,服务器需要消耗一定的内存空间来存储当前的连接信息.此时如果客户端是一些
大量不存在的主机,那么服务器迟迟得不到客户端ACK响应导致内存无法释放这些资源最终把服务器的内存空间消耗干净.

TCP确认
Winodow Size 的值 表示TCP每次可以发送的数据包的个数,而不是一个包一个包的发送,提高数据包的发送效率
UDP传输协议
UDP包头
16bit 2个字节 源端口
16bit 2个字节 目标端口
16bit 2个字节 内容长度
16bit 2个字节 checksum
data 发送内容
UDP特性
1.工作在传输层
2.提供不可靠的网络访问
3.非面向连接的协议
4.有限的错误检查
5.传输性能高 没有tcp协议的握手机制
6.无数据恢复的特性
IP网络层协议
切片发送大数据包

DOS拒绝服务攻击
通过ping命令不断的向服务器发送大量的大数据包,由于客户端每次向服务器发送一个包服务器就必须要响应一个包.造成占用服务器大量的cpu和网卡资源.
TCP/IP协议栈基础知识的更多相关文章
- TCP/IP网络基础知识
TCP/IP是一组用于实现网络互联的通信协议,通常称为TCP/IP协议族.包括TCP.IP.UDP.ICMP.RIP.TELNETFTP.SMTP.ARP.TFTP等. 一.TCP/IP模型将协议分为 ...
- 浅谈TCP IP协议栈(一)入门知识【转】
说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...
- UNIX/Linux网络编程基础:图解TCP/IP协议栈
目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(A ...
- 计算机网络基础之TCP/IP 协议栈
计算机网络基础之TCP/IP 协议栈 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.TCP/IP 协议栈概述 1>.什么是TCP/IP协议栈 Transmission C ...
- TCP/IP协议栈---网络基础篇(3)
TCP/IP协议栈 在网络中实际使用的是TCP/IP,OSI是参考模型. TCP/IP协议栈 – 是由一组不同功能的协议组合在一起构成的协议栈 – 利用一组协议完成OSI所实现的功能 应用层协议 传输 ...
- 渣渣小本求职复习之路每天一博客系列——TCP/IP协议栈(5)
前情回顾:一篇短短的博客明显不能满足TCP和UDP这两个饥渴的汉子,而且还被应用协议占了一小半的篇幅.在昨天结束之后,相信大家都基本对TCP/IP协议栈的轮廓有一个大概的印象了,能够对整体有所把握. ...
- TCP/IP协议基础(转)
转自 http://www.chinaunix.net 作者:Bernardus160 发表于:2003-12-03 17:33:15 TCP/IP协议基础 -------------------- ...
- 【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识
第2章 嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等 ...
- 理解TCP/IP协议栈之HTTP2.0
1 前言 前面写了10多篇关于Redis底层实现.工程架构.实际应用的文章,感兴趣的读者可以进行阅读,如有问题欢迎交流: 1.Redis面试热点之底层实现篇-12.Redis面试热点之底层实现篇-23 ...
随机推荐
- php-fpm开机自动启动脚本其实源码包里边就有
网上有各种版本的php-fpm开机自动启动脚本, 其实你编译后源目录已经生成自动脚本.不用做任何修改即用.cp {php-5.5.x-source-dir}/sapi/fpm/init.d.php-f ...
- 开源库RxJava、ButterKnife
1. 简介 RxJava "RxJava is a Java VM implementation of Reactive Extensions: a library for composin ...
- StrokesPlus 谷歌搜索结果转https
StrokesPlus 谷歌搜索结果转https 亲测ie11可用 --清空剪切板 acSetClipboardText('') acSendKeys("^l") --选中地址栏 ...
- Spring的标签和验证等模块
使用了spring,真的可以简化很多开发,但前提是你懂spring技术,并且环境,架包没错. 今天编写了登录验证的模块,但是就是验证不了,不知道哪里出错了,但是也不好改错,这样还是很费时间的. 错误提 ...
- 第9天 py就业班基础02.01-02
明天该看就业班的02 03字串符 2018-4-21 10:47:34 数据类型 py自动给数据分类型 2018-4-21 10:55:05 input使用 定义一个变量 然后input输给变 ...
- JVM优化之 -Xss -Xms -Xmx -Xmn 参数设置
XmnXmsXmxXss有什么区别Xmn.Xms.Xmx.Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果. -Xms 堆内存的最小大小,默认为物理内存的 ...
- xml文件以及解析
1.创建一个xml文件 <?xml version="1.0" encoding="UTF-8"?> <!-- xml:是一个可扩展的标记语言 ...
- tsm 带库 磁带
磁带和存储池设置 新装入带库的磁带,需执行格式化命令方可使用,而存储池采用手工定义方式加入磁带,所以checkin状态设置为private,而不使用scratch磁带自动定义方式. label lib ...
- js积累点
window.opener.parent.frames['taskAnswerInfoForm'].location=newUrl;//可以使该frame的页面跳转.不需要再写xxx.location ...
- 洛谷P1032 字串变换【bfs】
题目链接:https://www.luogu.org/problemnew/show/P1032 题意: 给定一个原字符串和目标字符串,以及几个字符串变换的规则. 问能否根据这几个规则在十步之内把原字 ...