TCP/IP协议基础知识笔记

1.TCP/IP协议包括FTP、SMTP、TCP、UDP、IP五中协议 。
2.TCP/IP四层体系结构:应用层、传输层、网络层、数据链路层。
3.TCP传输层协议,IP 网络层协议。
4.链路层:数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接收地址
5.IP地址与域名均是一一对应的,DNS就是域名解析的服务器。
6.以太网一般传输速率,全双工,收发可同时达到10Mbps的速率。

1.0.0网络层 网络层的主要工作是定义网络地址、区分网段、子网内MAC寻址、对于不同子网的数据包进行路由。
1.0.1 ip协议 即定义ip地址,ip地址32位,每个字节用点隔开,前两个字节为网络地址,后两个字节为局域网地址,
IP地址和子网掩码通过按位与运算后就可以得到网络地址。
1.0.2 ARP协议 即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。
1.0.3 路由协议 不在同一个子网以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,完成这个路由协议的物理设备就是路由器,路由器扮演着交通枢纽的角色。

1.1.0传输层 传输层的主要工作是定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性。
1.1.1UDP协议 UDP协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号。
1.1.2TCP协议 即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,TCP协议在UDP基础之上建立了三次对话的确认机制。

1.2.0应用层 应用层的主要工作就是定义数据格式并按照对应的格式解读数据。
应用层定义了各种各样的协议来规范数据格式,常见的有http,ftp,smtp等,在请求Header中,分别定义了请求数据格式Accept和响应数据格式Content-Type

1.2.1 TCP报文格式 网络传输层:TCP报文格式:16位源端口号+16位目的端口号+32位序号+32位确认序号+4位首部长度+6位保留+标志+窗口+紧急指针+选项+数据。
1.2.2 标志:6位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。
1.2.3 三次握手 (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
1.2.4 四次挥手
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

热门文章

暂无图片
编程学习 ·

2.7 网络抓包

1.简介 抓包是指对网络传输中发送与接收的数据包进行拦截、重发、编辑和转存的操作。 在开发网络爬虫时,给定URL,开发者必须清楚客户端是如何向服务器发送请求的,以及客户端发出请求后服务器返回的数据是什么。只有了解这些内容,开发者才能在程序中拼接URL,针对服务返回的…
暂无图片
编程学习 ·

百天打卡计划第四天-Thread之类的加载过程

类的加载过程 类的加载过程一般分为三个大阶段,加载阶段、连接阶段、初始化阶段。 1加载阶段:主要是负责查找并加载类的二进制数据文件,其实就是class文件。 2连接阶段:连接阶段的工作主要分为三个阶段验证:主要是确保类文件的正确性。 准备:为类的静态变量分配内存,并为…
暂无图片
编程学习 ·

用Python读取pg数据库,准确统计每一张表的数据量,输出中英文表名和数据量

1 前言 在我们工作中,有时候老板关系我们手上到底有多少数据,每一张表中到底有多少数据量,整个库又有多少数据量?要给他一个准确的数据,给出一张详细清单。 在网上遇到的一种做法是使用navicat写SQL语句统计pg_class里面的reltuples这个列数据,但是发现这个数据有很大偏…
暂无图片
编程学习 ·

单例和枚举原理

单例和枚举原理 枚举 简单介绍枚举类能够统一管理一些全局的变量,封装对于他们的逻辑与方法。还能和switch-case结合,简化大量的if-else,让代码更加优雅。直接Demo public enum Week {//本文的枚举类变量,枚举类实例,name属性指的就是MONDAY//这类的变量MONDAY(0,"星…
暂无图片
编程学习 ·

聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】06_交易性能优化技术之缓存库存

文章目录本章目标7-1 交易性能瓶颈7-2 交易验证优化7-3 活动缓存库存方案一(重点)库存行锁优化扣减库存缓存化(方案一)异步同步数据库(方案二)异步消息队列rocketmq库存数据库最终一致性保证7-5 活动缓存库存方案二分布式事务7-7 rocketmq安装7-8 缓存库存接入异步化 本章…
暂无图片
编程学习 ·

springboot+Netty搭建web服务器实现物联网温湿度采集

前言:这段时间做了一个课程设计,内容是将温湿度传感器采集到的温湿度数据上传到web服务器并以表格或者折线图的方式可视化展示出来。 话不多说:上代码 ①Netty服务器搭建 NettyServer.java /*** @author cx* @Time 2020/6/29 22:00* @Description netty 服务器配置*/ public…
暂无图片
编程学习 ·

自增自减及逗号表达式

** 自增自减及逗号表达式 **一.自增、自减运算符1.自增运算符++和自减运算符–都是单目运算符,功能是使变量的值加1或减1。 2.自加或自减只能用于变量,而不能用于常量或表达式。 3.用于++、–运算的变量只能是整型、字符型和指针型变量运行下面的程序,观察并分析运算规则#in…
暂无图片
编程学习 ·

火箭少女101毕业,rocketgirls.fans粉丝站上线震撼饭圈

2年前的2018年6月23日晚:经过一百零四天的艰苦训练和比赛,由457家公司、13778名练习生中层层挑选出的11名女孩站上成团出道位,组成为期2年的限定女团,火箭少女101成团出道。两年后的2020年6月23日晚:火箭少女101的2年限定组合期限已到,晚上8点 “遇见再见”火箭少女101告…
暂无图片
编程学习 ·

Java字节码增强探秘

1.字节码1.1 什么是字节码?Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。因此,也可以看出字节码对于Java生态的重要性。之所以被称之为字节码,…
暂无图片
编程学习 ·

现代开发者必备:5个更流畅、更受欢迎的Python web框架

全文共1837字,预计学习时长9分钟图源:unsplash如今,可供选择的Python web框架有不少,能帮助你更快更轻松地创建web应用。本文就将为大家介绍一些更现代、使用更广泛的web框架。1.FastAPIFastAPI致力于实现轻便和快速,笔者很喜欢它,它的开发速度和简单程度令人欣慰。这对于…
暂无图片
编程学习 ·

关于剪贴板的故事—起源于公众号后台的一次探寻

关于剪贴板的故事—起源于公众号后台的一次探寻 整个事情的起源是这样的。 六月底,我打算重新开始更我停了很久的公众号,因为域名到期和图片自动上传不够便利的原因,我弃用了之前的vscode+markdown preview enhanced插件+qiniu-upload-image插件的写文方案。同时,vscode写m…
暂无图片
编程学习 ·

计算机网络基础,看完不怕面试

前言 计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标准上进行。一个很形象地比喻就是我们的语言,我们大天朝…
暂无图片
编程学习 ·

面向对象到底是什么

面向对象编程OOP,全称 Object Oriented Programming两个基础概念:类(class)和对象(object)一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石面向对象编程语言OOPL,全称 Object Oriented Pro…
暂无图片
编程学习 ·

css3属性选择器

属性选择器 基本用法选择符 简介E[att] 选择具有att属性的E元素E[att=val] 选择具有att属性且属性值等于val的E元素E[att^=“val”] 匹配具有att属性、且值以val开头的E元素E[att$=“val”] 匹配具有att属性、且值以val结尾的E元素E[att*=“val”] 匹配具有att属性、且值中含有…
暂无图片
编程学习 ·

手把手教你理解Volatile关键字

volatile关键字volatile 关键字是java提供的一种轻量级同步机制。他能够保证可见性和有序性,但是不能保证原子性。volatile可见性可见性表示被这个关键字所修饰的实例,在被修改后,其他的线程均可见。class MyData { // 如果没有volatile关键字的话,那我们在修改number的…
暂无图片
编程学习 ·

wx.DateTime.ParseDate(‘yesterday‘)往前倒退一天

用wxpython写了个小程序,打开程序后要把工作日期往前倒退一天,看wx.DateTime的说明时,发现这个控件有强大的自动分析功能。官方原文如下:The date formatting and parsing functions convert wx.DateTime objects to and from text. The conversions to text are mostly tr…