【计算机网络】传输层

4.传输层

为两台主机上的应用程序提供端到端的服务(进程间通信的服务)

端口:标识一个应用程序,它是应用程序的代号

一个进程可以有几个端口

总结常用端口:

FTP:21   TELNET:23  SMTP:25  TFTP:69  HTTP:80  SNMP:161  Mysql:3306

套接字:唯一标识了网络中的一个主机和它上面的一个进程

A主机把“hello”发给B主机的过程?

1.主机A在本机的路由表中查询匹配主机B的IP的网络号;

2.如果能够查询到,说明主机B和主机A在同一网段(通常是在同一局域网内),则下一跳即为主机B。主机A在ARP缓存中查找主机B的MAC地址(如没有则先发送ARP广播),然后将数据包封装成帧发送至通信线路上。该帧的源MAC是主机A的MAC地址,目的MAC是主机B的MAC地址。

1)如果主机A和主机B是网线直连的,那么主机B直接收到主机A发来的帧。

如果主机A和B是通过交换机相连的,交换机的某个端口收到主机A发来的帧,然后根据帧中的目的MAC地址在MAC地址表中查询对应的转发端口。如果找到了,直接从该端口转发出去;如果没找到,则在除了接收到数据包以外的所有端口进行转发(广播)。

2)如果主机A和B是通过路由器相连的,路由器的某个端口收到主机A发来的帧,其后的处理流程见步骤4。

3.如果不能查询到,说明主机A和主机B不处于同一网络中,需要通过网关来进行跨网络的通信。主机A会通过默认网关(通常是路由器)来提交报文,即下一跳是路由器。主机A根据网关的IP在自己的ARP缓存中查找对应的MAC地址(如没有则先发送ARP广播),然后将数据包封装成帧发送至通信线路上。该帧的源MAC是主机A的MAC,目的MAC是路由器的MAC。

4.当网关路由器接收到数据帧时,首先提取包头中的目的MAC地址,在MAC表进行查询。如果找到对应项,则按对应的端口进行转发(这一步实现了与交换机一样的功能);如果没找到对应项,则提取数据包包头中的目的IP。

1)如果目的IP是自己(这是可能的,比如ping路由器),则交由上层处理。

2)如果目的IP不是自己,则需要进行转发,在路由表中查询目的IP的转发端口和下一跳IP。若找到了对应的路由表项,则按照路由表项转发;若没找到对应的路由表项,则按照缺省路由进行转发。转发时,源和目的IP地址不变,源MAC地址改为转发端口的MAC地址,目的MAC地址改为下一跳IP的MAC地址。

TCP(传输控制协议):面向连接 可靠的 流式服务

可靠:超时重传 应答确认机制 滑动窗口进行流量控制

面向连接:在通信之前,先建立连接,-》通过三次握手建立连接,-》断开-》通过四次挥手

流式服务:数据没有起始和末尾,没有边界限制 多次发送,可以被对方一次接受  可能出现粘包  

TCP报头:

序号:第一个字节的序号

确认号:期望收到对方下一个报文段的第一个数据字节

数据偏移:首部长度4B为单位

紧急位URG:URG=1时,标明此报文段中有紧急数据,是高优先级数据

确认位ACK:ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1

推送位PSH:PSH=1时,接收方尽快交付接受应用进程

复位RST:RST=1时,TCP连接中出现严重差错

同步位SYN:SYN=1时,表明是一个连接请求/连接接受报文

终止位FIN:FIN=1时,表明此报文段发送方数据已发送完,要求释放连接

窗口:接收窗口

紧急指针:紧急数据的字节数

三次握手:

1.客户端发送连接请求报文段,无应用层数据 seq序号随机

2.服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文,允许连接,无应用层数据 i+1(对客户的SYN报文段进行确认)

3.客户端为该TCP连接分配缓存和变量,并向服务器端返回确认的确认,可以携带数据

1.三次握手哪些阶段可能收到攻击?

SYN泛洪/溢出攻击 半连接状态太多(买奶茶)第二阶段

2.为什么是三次,不是2次?(举反例)

已失效的连接请求报文

四次挥手:

1.客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接

2.服务器端回送一个确认报文段,客户到服务器端这个方向的连接就释放了——半关闭状态

3.服务器端段发完数据,就发出连接释放报文段,主动关闭tcp连接

4.客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL(最长报文段寿命)后,连接彻底释放(要确保服务器是否已经收到了我们的 ACK 报文,如果没有收到的话,服务器会重新发 FIN 报文给客户端,客户端再次收到 ACK 报文之后,就知道之前的 ACK 报文丢失了,然后再次发送 ACK 报文。)

1.四次挥手,可不可以是三次?

可以是三次

2.哪个阶段可能收到攻击?

time_wait状态存在的意义:

1.可靠的终止TCP的连接

2.能够让迟来的报文被识别并丢弃

怎么解决粘包?

1.send/recv/send

2.数据添加头和尾

TCP拥塞控制:

UDP(用户数据报协议):无连接 不可靠 数据报 (视频)

面向报文:对应用层给UDP多长的报文,UDP就照样发送,即一次发一个完整报文,一次性传输少量报文

UDP报头:

源端口号:可有可无(是否需要回信)

如何使用UDP实现可靠传输?

自己在应用层完成可靠传输

TCP和UDP不同/特点

SCTP(流控制传输协议)

 

 

 

nestat -natp 查看TCP连接状态

tcp 编程流程

 

1.多进程方式实现并发

2.多线程的方式并发

3.线程池/进程池(创建固定数目,不结束)高频率的申请和销毁使用

4.可以使用io复用技术,实现多个客户端的处理

负载均衡/集群:业务逻辑复制一份部署到新主机

集群--负载均衡配合

分布式:如流水线

缓存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值