天天看点

计网复习

​​http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html​​

现在广泛应用的,是TCP/IP体系中的五层结构。对应的就是OSI体系的七层结构。

那么,五层结构,也就是分为:

物理层 -- 数据链路层 -- 网络层 -- 传输层 -- 应用层

怎么记呢?从理解上记

比如我现在需要从  广州 -- 洛杉矶  怎么做

1、物理层  (网线)

计算机要通信,肯定要连接在一起,现在计算机的通信都是通过光缆来连接的,和外国的,也是通过海底光缆来连接的。所以物理层要解决的就是,链接,然后0101010101010101010发送信息

2、数据链路层 (把1010100101分组 && 拥有了MAC,局域网广播通信)

但是这样不能识别,肯定要按照规定的分组来识别,比如8个一组等等。同时,多台计算机连接在一起形成一个子网,确实可以通讯了,但是我发给你,也需要有你的地址。所以,数据链路层就解决了这个问题。把数据变成   MAC地址 + 数据的格式,然后通过广播的方式,广播就是在你的局域网中发出去,每个人都可以看到,但是如果比较和自己的MAC不对应,就不接收。

3、网络层 (IP协议,广域网通信, 引进路由)

现在是可以通讯了,但是按照上面的方式,每次发送数据都用广播的方式,是不行的。世界上太多机器了,不能这样。不同网段的,就不能用广播的方式来传递了。不然会窘机

因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。

遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。

这就导致了"网络层"的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。

所以,有了IP协议,在广域网通讯的时候,如果同一局域网的可以用MAC地址这样广播方式搜查,如果不同局域网的,就不知道对方的MAC地址。那么就发送给自己的网关,网关会识别然后发送去其他网段的了。

所以:分两类情况

3.1  如果同一局域网,那么发送   对方MAC  对方IP

3.2 如果不同局域网,那么发送   网关MAC  对方IP

4、传输层 (各种应用监听的端口不同,加入端口,似的发送更加明确)

现在真的真的可以通讯了,但是我们那么多应用,可以一边聊天,一边上网。怎么区分是谁的?所以,加入端口这个概念。即可区分。

"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。

这里有了TCP 、、、UDP协议,她们的头部都加上了端口这个东西即可

TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。

5、应用层 (解析拿到过来的东西)

即使TCP可以应用在stmp、http中,那么还是需要有她们各自的格式来解读。这就是应用层解决的东西

最后变成了这样

计网复习

2020-08-06 20:47:04:

什么是网卡?

网卡就是把数字信号转换成光电信号的东西。这个是一个传输协议栈,所有东西都说的是传输方面的,比如物理层其实说的是东西怎么在物理层传播.

计网复习

网卡运行在CPU 

------------------------------

物理层

数据链路

struct ethhdr {
  unsigned char h_dest[ETH_LENGTH];
  unsigned char d_dest[ETH_LENGTH];
  unsigned short h_proto;
} s;      

网络层

计网复习
struct iphdr {
  unsigned char version:4,
                hdrlen:4; // 虽然是4bit,可以表示15,但是单位要*4
  unsigned char tos; // 流媒体那些
  unsigned char totlen;
  unsigned short id;
  unsigned short flag:3,
                 offset:13;
  unsigned char ttl; // 网络经过一层就会减1,默认64
  unsigned char proto; // tcp/udp
  unsigned short check_sum;

  unsigned int s_ip;
  unsigned int d_ip;
} c;      

传输层(UDP/TCP)

什么是端口: 传输层那边定义的一个字段,叫端口

struct udphdr {
  unsigned short s_port;
  unsigned short d_port;
  unsigned short length;
  unsigned short check_sum;
};      

// TCP详解

1. 三次握手发生在函数的哪里呢?

客户端: connect

服务器: listen()和accept()这两个函数之间,由系统的tcp协议栈实现的.

第一个SYN过来后, 有一个syn队列...

收完之后,假如accept队列。变成一个TCB(使用五元组唯一确定)..

2. 调用send的过程: 从用户态发去内核态,然后内核态又是用协议栈发去网卡的.

TCP是怎么保证顺序的? 网络上是无序的,通过延迟ack

计网复习

3. tcp如何确定发多少个包

计网复习
计网复习
计网复习

NAT:

1。完全锥形nat:我要去808找晶晶,假如真的存在,就可以进去

2.   ip限制锥形nat:只允许固定的IP放问数据进来。

3.   端口限制锥形nat:ip+端口

4.    对称nat: 锥形nat都是客户端:网关:服务器 = 1:1:N,但是对称nat就是1:N:N\\

Q1:如何判断网关nat类型

继续阅读