开学第一周

数据结构

  • 循环链表:单链表的最后一个元素的指针域指向头节点。
    实现代码:
	list *head=(list *)malloc(sizeof(list));
	list *cur,*pre;
	cur=head;
	for(int i=0;i<5;i++)
	{
		pre=(list *)malloc(sizeof(list));
		pre->n=i;
		cur->next=pre;
		pre=pre->next;
	}
		cur->next=NULL;
	while(cur!=NULL)
	{
		cur=cur->next;
	}
		list *p=head;
		cur->next=p;
  • 两个双链表的合并
    先保存链表A的头节点,链表A的最后一个节点的下一个指向链表B的next的next,(略过链表B的头节点),保存链表B的头节点,链表B的最后一个节点指向链表A的头节点,释放链表B的头节点。
    实现代码:
	list *a=list1->next;
	list1->next=list2->next->next;
	list *b=list2->next;
	list2->next=a;
	free(b);
  • 双向链表:链表的每一个成员中有前置指针和后置指针,后置指针指向下一个元素,前置指针指向前一个元素,双向链表就搭建起来了。
typedef struct double{
int n;
struct double *up;
struct double *next;
}list;
int n;
list *head=(list *)malloc(sizeof(list));
list *cur,*pre;
cur=head;
while(scanf("%d",&n)!=0);
{
pre=(list *)malloc(sizeof(list));
pre->n=n;
cur->next=pre;
pre->up=cur;
cur=pre;
}
  • 双向链表的插入:顺序为 1.插入节点的前置指针指向被插入节点。2.插入节点的后置指针指向被插入元素的下一个节点。3.被插入元素的下一个元素的前置指针指向插入元素。4.被插入元素的后置指针指向插入元素。
list *new=(list *)malloc(sizeof(list));
new->up=p;
new->next=p->next;
p->next->up=new;
p->next=new;
  • 双线链表元素删除
    被删除元素上一个元素后置指针指向删除元素的下一个元素,删除元素的下一个元素的前置指针指向被删除元素的上一个元素,释放被删除的元素空间。
p->up->next=p->next;
p->next->up=p->up;
free(p);

PDF

ICMP协议
又叫网络控制报文协议,是网络层中的一个重要协议,设备之间进行通信时,根据默认网关向路由器发送报文,路由器会检索最佳路径并向主机发送redirect信息,主机会向新的路径发送报文。
ICMP协议应用
Tracert:源主机把报文的TTL值设置为1,每当报文到达吓一跳,TTL超时,会向源主机发送一条TTL超时的信息,此时,源主机将报文的TTL值设置为2,以此类推,可以知道每一跳,用来发现环路。
ARP协议
在目标主机只知道IP地址不知道MAC地址的时候,通过ARP协议来获取下一跳的MAC地址。获取的下一跳的MAC地址会暂时储存在ARP缓存表中。
ARP缓存表中储存了IP地址和MAC地址的关联关系,发送数据之前,设备查找ARP缓存表,若ARP缓存表中存在对方设备的MAC地址,则发送帧,若不存在,发送ARP Request来获取下一跳的MAC地址,在ARP缓存表的有效期内,都可以进行再次发送。
传输层协议
TCP:是一种全双工协议;工作流程为:客户端向服务器发送连接请求,服务器向客户端发送已收到连接请求的信息,客户端向服务器发送收到服务器的回应。此时,客户端与服务器之间就已经连接起来了。
TCP连接的断开,客户端向服务器发送报文并且停止发送数据,服务器回应服务器的报文,服务器向客户端发送报文,客户端回应服务器的报文。
UDP:
对传输速度和延迟要求较高的时候,UDP协议可以替代TCP协议转发数据,UDP无需先建立链接,但无法保证数据传输的可靠性。
UDP传送的数据,先传送的不一定先到达,因为UDP数据包没有序号。
数据转发过程:主机转发数据时,会检查数据能否到达目的端,通过默认网关将数据转发,此时在ARP缓存表中查询下一跳的MAC地址,若存在,则转发数据,不存在,发送ARP请求获取下一跳的MAC地址。
数据的封装过程:报文送往数据链路层进行封装,发送到以太网中,所有设备都会接受到报文,设备对报文进行FCS查询,查询通过则检测MAC地址是否相符,否则直接舍弃。
数据包转发:路由器接收到数据报文后,检查IP报文段,根据IP地址查询路由表,确定能否达到目的端。处理TTL值,并且报文的大小不能超过MTU,如超过则将报文分片。接下来转交给数据链路层进行封装,查询下一跳的MAC地址,若查询不到则ARP协议获取。
路由器接收到数据后,会进行MAC验证,若符合,则进行FCS验证后交给网络层处理,不符合直接丢弃。网络层检查报文IP部分时候和自己符合,若报文超过MTU大小被分片,则会重新组合一起。IP段被剥离后,传输层处理数据段,使用TCP协议将数据传输出去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值