【剑指Offer-Java面试】网络基础

网络基础知识

OSI七层概念模型如下:

第1层 物理层 (网卡):bit 流传输。主要定义了物理设备的标准,如:网线类型、光纤的接口、各种介质的传输速率。

第2层 数据链路层 (交换机):物理寻址,同时将原始比特流转换成逻辑传输线路。在传输比特流的过程中可能出现传输不完整或者错传的可能,数据链路层定义了如何格式化数据以进行传输,提供错误检测和纠正;本层将数据组成“帧”,交换机工作在这一层,对帧解码,并把数据发送到正确的接收方。

第3层 网络层 (路由器,点到点):IP寻址,通过IP连接网络上的计算机;其主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方,本层的数据称为数据包。

第4层 传输层(端到端):建立了主机端到端之间的连接,

第5层 会话层:不同机器上的用户之间建立及管理会话。

第6层 表示层:对应用层数据编码和数据格式转换。保障不同系统间通信。

第7层 应用层:提供应用接口,为用户提供各种网络服务。

OSI的实现—TCP/IP四层模型:

OSI七层模型TCP/IP概念层模型功能TCP/IP协议族
应用层应用层文件传输、电子邮件、文件服务、虚拟终端TFTP、HTTP、FTP、SMTP、DNS、Telnet
表示层数据格式化、代码转换、数据加密没有协议
会话层解除或建立与其他节点的联系没有协议
传输层传输层提供端对端的接口TCP、UDP
网络层网络层为数据包选择路由IP、ICMP、RIP、OSPF、BCP、ICMP
数据链路层链路层传输有地址的帧及错误监测功能SLIP、CSLIP、PPP、ARP、RARP、MTU
物理层以二进制数据形式在物理媒体上传输数据ISO2110、IEEE802、IEEE802.2

TCP协议:

  • 面向连接的、可靠的、基于字节流的传输层通信协议
  • 将应用层的数据流分割成报文段并发送给目标节点的TCP层
  • 数据包都有序号,对方收到则发送ACK确认,未收到则重传
  • 使用校验和来检验数据在传输过程中是否有误

基于字节流

面向连接

可靠传输

缓冲传输

全双工

流量控制

 

tcp报文头

 

1、源端口和目的端口(Source port & destination port):

       TCP和UDP都不包含IP地址,说明端口是属于传输层范畴的,IP是属于网络层范畴的。两个本地的进程通信可以有———管道、内存共享、信号量、消息队列等方法进行通信;两个进程如果要进行通信最基本的要求是能够唯一标识一个进程,在本地进程中,使用pid来唯一表示一个进程,但在两台计算机中要进行通信pid就不能唯一表示两个进程了。解决这个问题的方法就是在传输层中使用协议端口号,即Protocol Port Number,简称端口。TCP协议和端口号可以唯一标识主机中的一个进程,我们就可以用 IP地址 + 协议 + 端口号 唯一表示网络中的一个进程。在一些模式中,这个唯一标识也称“套接字”,即“Socket”。

2、数据序号(Sequence Number):

       TCP连接中传送的字节流中的每个字节都按顺序去编号了,例如一段报文的数据序号字段值为108,而携带的数据有100个字节,那下一个报文段就应该从208开始。

确认序号(Acknowledgement Number):

       是期望收到对方下一个报文的第一个数据字节的序号。例如 A 给 B 发送的报文中数据序号为301,数据长度为200,说明 B 收到了A发送的500数据,所以在返回的确认报文中会将确认序号置为501.

3、偏移量(offset):

就是TCP数据与TCP报文的起始处有多远,即头部长度。

4、保留域(Reserved):

保留今后使用,目前都会标为0。

5、TCP Flags:

URG:urgent 紧急指针标识,当它为1时标识紧急指针有效。

ACK:acknowledgment 确认序号标识,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

PSH:push标志,为1是代表带有push标志的数据,指示接收方在接收到该报文段后,应尽快将这个报文段交给应用程序,而不是在缓冲区去排队。

RST:reset 重置连接标识,用于重制由于主机崩溃或者其他原因发生错误的连接,或者用于拒绝非法的报文段和拒绝连接请求。

SYN:syn number 同步序号,用于建立连接过程,在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意       建立连接,则应在相应的报文段中使用SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受报文。

FIN:finish 用于释放连接,标识数据发送方没有数据发送了。

6、窗口字段(window):

滑动窗口的大小,用来告知发送端接收端的缓存大小,以此控制发送端的发送速率,从而达到流量控制。

7、校验和(Check Sum):

        源机器基于整个的TCP报文段(头部、数据)计算一个数值,收信息机要与源机器数值 结果完全一样,从而证明数据的有效性。检验和覆盖了整个的TCP报文段,这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证的。

8、紧急指针(urgent pointer):

紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此,紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为零时也可发送紧急数据。

 

TCP三次握手

 

 

TCP三次握手:

第一次:客户端发送SYN包到服务器,【SYN=1,ACK=0,seq=x】,并进入SYN_SEND状态,等待服务器确认。

第二次:服务器返回一个确认包,【SYN=1,ACK=1,seq=y,ack=x+1】,并进入SYN_RCVD。

第三次:客户端发送一个确认包,【ACK=1,seq=x+1,ack=y+1】,进入已建立状态,服务器收到确认包,进入已连接状态。

 

1、三次握手的目的是:初始化sequence number的初始值;

2、第一次握手时,服务端收到SYN包,并回复ACK+SYN,但没有收到客户端的ACK确认,服务端会不断重试直到超时,Linux下默认5次共63秒。

3、为防止恶意攻击,syn队列满之后,服务器会发起syn_cookie连接,如果客户端没有响应,服务端会放弃本次处于SYN_RCVD的连接。

4、TCP连接后具有保活机制,若连接处于非活动状态,开启保活功能的一方会向另一方发送保活探测报文,达到保活时间间隔后仍未收到响应则重试,尝试次数达到探测次数后仍未收到响应则断开连接。

TCP四次挥手:

四次挥手

 

 

UDP:

特点:1、面向非连接

  2、不维护连接状态,支持同时向多个客户端传输相同的消息。

  3、数据报偷8个字节,额外开销更小。

  4、吞吐量只受限制于数据生成速率,传输速率及机器性能。

  5、尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表。

  6、面向报文,不对应用程序提交的报文信息进行拆分或者合并。

TCP和UDP:

  • 面向连接和无连接
  • 可靠性
  • 有序性
  • 速度
  • 量级

 

TCP滑动窗口:

RTT:发送一个数据包到收到对应的ACK所花费的时间

RTO:重传时间间隔

 

HTTP:

支持客户/服务器模式

简单快速

灵活

无连接

无状态

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值