TCP/IP知识点总结

TCP/IP知识点总结

1.层级

分层:
链路层->网络层->运输层->应用层
物理层->链路层->网络层->运输层->会话层->表示层->应用层

每层作用:
链路层:实现数据在一个网络的传输

不同层对数据包的称谓:
链路层->帧
网络层->数据报
运输层->段

网络层:IP ICMP ARP(ARP在tcp/ip中属于网络层,OSI中归到链路层)
运输层:TCP UDP

单播,广播,多播:
TCP:单播
UDP:单播,广播,多播

封装:应用程序在发送数据时,沿着协议栈从上往下传递,每层协议都在上面的基础上加入自己的头部信息(以太网为首尾)
例如:
应用程序数据
TCP/UDP头部 应用程序数据 (TCP报文段)
IP头部 TCP/UDP头部 应用程序数据 (IP数据报)
以太网头部 IP头部 TCP/UDP头部 应用程序数据 以太网尾部

分用:帧在到达目的主机时,由底向上传递,每层协议剥离并处理本层负责的头部信息,最终传递给应用程序

MAC地址:以太网地址/物理地址
MAC地址用于链路层和物理层,IP地址用于网络层及以上层
封装好的数据,在剥去MAC帧的首尾部后上传到网络层,网络层在IP首部找到源IP地址和目的IP地址

2.DNS解析

DNS解析:
UDP的方式发送域名给本地域名服务器,如果查到ip地址传回,如果没找到,本地域名服务器作为DNS的客户端向其他域名服务器发出请求
主机-----》本地DNS 一般采用递归查询(本地DNS代替主机查询)
本地DNS-----》根DNS 一般采用迭代查询(根DNS告诉本地DNS下一步去请求哪个DNS服务器)
递归:客户端只发一次请求,要求对方给出最终结果。
迭代:客户端发出一次请求,对方如果没有授权回答,它就会返回一个能解答这个查询的其它名称服务器列表,
客户端会再向返回的列表中发出请求,直到找到最终负责所查域名的名称服务器,从它得到最终结果。
DNS缓存:
DNS服务器会将收到的DNS应答结果在本地缓存,本地缓存找不到才向DNS服务器请求;
本地DNS查找后会将ip地址加入缓存,方便其他用户查找。(本地DNS一般是运营商,移动联通)

输入域名会发生什么:
1.浏览器查找域名的IP地址(浏览器缓存->本地host->本地DNS->根DNS)
2.建立TCP连接
3.客户端向服务端发出HTTP请求
4.服务端向客户端发出HTTP响应
5.页面渲染html(如果有css、图片、js会重复上述步骤,请求和响应)

同步请求和异步请求:
同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;
异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。
区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。

3.子网掩码和网关作用

子网掩码:
用来区分两个ip地址是否处于同一网络中,用ip地址和子网掩码的二进制做‘and’运算得出网络号,网络号相同代表处于同一局域网;
连续的1代表网络地址,连续的0代表主机地址
例如:
ip地址: 192.168.1.120
子网掩码:255.255.255.0 (设备号为0,网络号为255)

网关:
用于两个高层协议不同的网络互连。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发
给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。
网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、
代理服务器(也相当于一台路由器)。

4.ARP

ARP:(完成了从IP地址到MAC地址的映射,局域网中网络传输是“帧”,需要有MAC地址才能保证通信的进行)
本局域网中:
首先检查ARP高速缓存中有无要传输主机的IP地址,如果有,就发送到对应的MAC地址,如果没有执行下面的操作:
主机向自己所在的网络广播ARP请求,请求中包含(源主机的IP地址,MAC地址,以及目标机器的IP地址),网络中的所有机器都会收到这个请求,
但只有目标机器会应答ARP请求(单播),其中应答中包含自己的MAC地址,源主机将MAC地址添加到缓存
不同局域网:(在IP层以上,IP数据报始终是从发送主机ip到目标主机ip,但是链路层以下的MAC在不断变化)
源主机广播ARP请求,找到路由器的MAC地址,如果目标机器和路由器处于同一网络,找到目标机器的MAC地址,如果不在,继续寻找路由器的MAC地址

5.IP地址和MAC地址

IP地址和MAC地址:
IP地址用来执行网外通信,将一个子网作为一个地址加入局域网,不同局域网通信时,根据ip地址找到对应的局域网,然后根据MAC地址在局域网内找到
具体的主机;IP类似于地区邮编,MAC类似于个人家门牌号;

6.IP

TCP在不可靠的IP层上提供了可靠的传输层:
TCP类似于淘宝卖家和买家 IP是快递公司 如果IP丢包 TCP卖家会确认是否收到 如果没收到 卖家进行重传

IP:IP提供无状态 不可靠 无连接的数据报传送服务
无状态:IP不维护任何关于后续数据报的状态信息(一块一块传输,传输的顺序可能混乱)
不可靠:IP仅提供最好的传输服务,如果传输发生错误,发送ICMP到信源端,
无连接:通信双方都不长久维持对方信息,每次发送都需要指定对方IP地址

ICMP:差错报文(通常被认为是IP的组成部分,一般用于IP/TCP/UDP)
功能为:查询或者差错(确认IP包是否到达目标地址 / 通知在发送过程中IP包丢失的原因)

7.TCP

TCP:一种面向连接的,可靠的字节流服务
可靠性:应用数据被分割成TCP认为最合适的数据块,TCP发出一个段后,将启用定时器,等待目的端确认收到,如果没收到则会重发当TCP收到另一端的数据,它将发送一个确认,不过会有延迟,如果IP数据报丢包/重复,TCP会重传/丢弃;

UDP:
特点:沟通简单,传输速度快,无连接,容忍丢包
应用:DNS / TFTP / 语音视频流 / 直播 / 游戏

TCP UDP
连接 无连接
字节流 基于数据报
数据正确 可能丢包
数据顺序 不保证顺序

TCP的流量控制:
TCP通过声明窗口的大小控制流量,窗口的大小是字节数,这个值是接收方控制发送方可以连续发送未经确认的报文的数量

TCP的三次握手:
1.Client发送一个标志位SYN=1,随机产生初始序号©seq=x的数据包给Server,Client进入SYN_SENT(同步已发送)状态,等待Server确认;
2.Server收到数据包通过SYN=1知道client请求建立连接,Server将SYN和ACK都置为1,确认号(s)ack=x+1,随机产生一个初始序号(s)seq=y,
并将数据包传回Client来确认连接请求,Server进入SYN_RCVD状态;
3.Client收到确认,向Server发送数据包,其中ack=y+1,ACK=1,发送完毕Client和Server都进入ESTABLISHED状态,确认连接;
(1)客户端请求和服务器连接
(2)服务器收到,同意连接并等待客户端发出连接
(3)客户端发送建立连接
原因:
防止已经失效的请求连接经过长时间到Server端,建立连接后浪费资源;
客服端发出的请求网络拥塞,超时重传后建立连接,若连接断开后失效的请求到达服务端,只有两次握手服务端会变为连接状态,而此时客服端为CLOSE状态,资源浪费;
*********************3次握手可以让两端都产生确认序号,证明两端都收到对方的序列了;

四次挥手:
1.Client发送FIN=1,seq=x,用来关闭Client-Server的数据传送,Client进入FIN_WAIT_1状态;
2.Server收到后,发送ACK=1,ack=x+1,seq=y,Server进入CLOSE_WAIT状态;Client收到请求后进入FIN_WAIT_2状态;
(Client-Server关闭,但可以Client回ACK)
3.Server发送FIN=1,ack=y+1,seq=z,用来关闭Server-Client的数据传送,Server进入LAST_ACK状态,Client收到后进入TIME_WAIT状态;
4.Client发送ACK=1,ack=z+1,Server收到后进入CLOSE状态;

为什么Client要进入TIME_WAIT状态等待2MSL再变为CLOSE状态:(MSL为报文最长存活时间)
若Client发出应答后进入CLOSE状态,如果应答丢失,Server会超时重传请求,但是Client已经关闭,不会做出相应,Server无法关闭;

为什么要4次挥手:
因为Client发送FIN后,Server可能还有需要发送的数据,不想立即断开连接,只回一个ACK表示收到,等数据发送完才发送FIN到Client。
Client发出FIN,只代表Client没有要发送的数据,但是可以接收Server发出的数据,Server发出ACK代表收到,只有Server发出FIN才可以关闭连接。

确认应答(ACK):
发送方传输序号为1-1024数据,接收方发送ack=1025表示前1024数据都接收到了
发送1-1024,ack=1022,表示1022,1023,1024全没收到

滑动窗口:(窗口里为无需等待确认就可以继续发送数据的最大值)
接收端发出ack确认收到序列,同时发出win=xxxx,表示窗口还有xxxx大小,
开辟TCP缓冲区来放置接受但是未经确认的数据,只有ACK确认应答,才能从缓冲区删除,边沿代表已确认和未确认的分界线(确认后边沿向右移动)

流量控制(接受端):通告窗口
接收端通过将窗口win大小设置成缓冲区的大小,对发送端的数据进行控制

流量控制两种方法(发送端):
慢启动:(防止刚刚传输时接收方网络不好)(一个窗口传一个数据块)“慢启动” 只是指初使时慢, 但是增长速度非常快;
cwnd(拥塞窗口)=1,传输取win和cwnd最小值,每当接收方ack传回来,cwnd就*2,成指数形式增长,直到cwnd>win;
拥塞避免:
cwnd=cwnd+1/cwnd(cwnd每次最多+1);

网络拥塞和丢失数据: 慢启动门限=窗口最大值(TCP启动时)
1.无论在慢启动还是拥塞避免算法中,只要是网络拥塞(超时或重复确认),就令慢启动门限ssthresh=cwnd/2(最小是2),cwnd=1,执行慢启动算法;
2.如果收到3个或3个以上重复的ACK,执行快重传和快恢复;

慢启动门限ssthresh的判断:
cwnd<ssthresh,执行慢启动;
cwnd=ssthresh,两个都可以;
cwnd>ssthresh,执行拥塞避免;

快重传:
当发送端收到一连串3个或3个以上重复的ACK,说明报文段丢失,应该立刻重传丢失的报文段,无需等待重传定时器(RTO);

超时重传:
每发送一个数据后设置定时器,超过一定时间没有得到发送数据报的ACK就重新尝试,TCP的策略是超时间隔加倍,每次超时重传,时间间隔设置为先前的2倍

快恢复:
快重传发生后,令门限ssthresh=ssthresh/2,cwnd=ssthresh+3个报文段的大小,使用拥塞避免算法;(能收到3个ack说明网络没出现拥塞)
快恢复使用拥塞避免不使用慢启动的原因:
收到重复的ACK说明数据包离开网络顺利到达接收者的缓存,收发两端依然有数据的流动,而我们不想执行慢启动突然减少数据流,

8.HTTP和HTTPS

HTTP和HTTPS:
默认HTTP的端口号为80,HTTPS的端口号为443。

HTTP请求:(请求行,请求头部,空行,正文) GET 路径 http/1.1
GET /sample.jsp HTTP/1.1 请求行,方法+URI+http版本号
Accept:image/gif.image/jpeg,/ 请求头,说明服务器要使用的附加信息(例如,请求头可以声明浏览器所用的语言,请求正文的长度等。)
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate
空行
username=jinqiao&password=1234 正文,可以包含用户提交的信息或任意数据

HTTP响应:(状态行,响应头,空行,正文) http/1.1 200 ok
HTTP/1.1 200 OK 状态行,http版本号+状态码+状态消息
Date: Fri, 22 May 2009 06:07:21 GMT 响应头,说明附加信息
Content-Type: text/html; charset=UTF-8
空行

正文,服务器返回给客户端的信息

HTTP状态码:
1xx:请求处理中(已经接受)
2xx:请求成功 200(OK,请求成功)
3xx:重定向(完成请求需进一步处理) 301(永久转移) 302(暂时转移)
4xx:客服端异常 403(拒绝访问) 404(页面不存在)
5xx:服务端异常 500(服务器错误) 503(服务当前不可用)

cookie和session:(解决http无状态的方法)
由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie
cookie储存在客户端,session储存在服务端

cookie和session的缺点:
cookie session
可以被用户禁止 寄生在cookie下,cookie被禁止session也被禁止
不安全 用户访问量大时对服务器压力大
只能保存少量的数据

get和post方法请求的区别:
get post
可被缓存 不可缓存
可收藏书签 不可收藏书签
保存在历史记录 不会保存在历史记录
有长度限制 没有长度限制
不安全(数据在URL) 较安全(数据不显示在URL中)
一般用于请求(查) 一般用于提交(改)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值