2021-11-02

网络是由络连接设备通过传输介质网络终端设备连接起来进行数据交换、资源共享的平台。

网络连接设备:路由器、交换机

传输介质:网线、光纤、同轴电缆

网络终端设备:计算机、服务器、手机等(摄像头.非手机摄像头) 

OSI七层参考模型    由ISO国际标准化组织定义   先有模型定义 (IOS思科设备的操作系统)

 7-1物数网传.会表应   应用层.表示层.会话层...传输层.网络层.数据链路层.物理层

应1.通过人机交互来实现各种各样的服务

表2.编码 解码 加密 解密

会3.发现 建立 维持 终止会话进程

Aoolication Presentation Session Trassport Ntework Data link

传4.通过端口号来区分不同的服务..提供可靠的传输..数据分段

网5.根据IP地址来进行逻辑寻址

数6.LLC封装和MAC地址

物7.定义 电气电压.光学特性.接口规范   (网络 光纤)

 【4.传输层: 通过端口区分服务: 端口号0-65535,共65536个,0为特殊端口号(2^16=65536)

   静态端口号1-1023(2^10):与服务呈永久绑定关系。   动态端口号:与服务呈暂时绑定关系

   提供传输:TCP传输控制协议(面向连接.可靠.三次握手.四)    UDP用户数据报协议(非面向.       不可靠)网页跟视频的区别    可靠机制:确认 重传 排序 流控

 三次握手    (SYN 同步序列号   Ctl 控制位   Ack 确认   Seq序列号   FIN 断开连接   Ack=seq+1)

1.发送SYN(seq ctl=syn)                  2.发送SYN(seq ack+1 ctl=syn,ack)

3.建立会话(seq+1 ack+1 ctl=ack)   两侧序列单独计算.ack确认的是前段序列号+1

四次挥手

1.发送FIN(seq ack ctl=fin,ack)     2.发送ACK(seq ack+1 ctl=ack)

                                                            3.发送FIN  (seq ack+1 ctl=fin,ack)

4.发送ACK   (seq+1 ack+1 ctl=ack)   

TCP/IP协议只支持TCP/IP网络---IP网络    五层/四层模型

相同点:二者都是模型化层次化   下层对上层提供服务和支持   每层协议彼此相互独立

不同点:OSI现有模型才有协议   TCP/IP先有协议才有模型

              TCP/IP协议栈只适用于TCP/IP   网络层量不同

传输过程

   信号衰减-->物理加压-->中继器-->信号失真-->交换机-->广播风暴-->路由器

路由器的作用:

1.隔离/划分广播域  2.连接不同的网络  3.路由

交换机的作用:

1.无限延长传输距离  2.实现单播  3.解决冲突域

默认情况下,一个交换机属于一个广播域

如何解决冲突:

1.FIFO 先入先出   2.CSMA/CD 带冲突检测的载波多路访问技术

http   超文本传输协议    https    安全的超文本传输协议   

最大段长度  1480B  最大传输单元  1500B  报文头文件20B

生产者消费者问题是一个经典的同步问题,其中生产者和消费者共享一个缓冲区,生产者向缓冲区中生产产品,消费者从缓冲区中消费产品。在多线程的环境下,生产者和消费者可能会同时访问缓冲区,因此需要对缓冲区进行同步控制。 以下是一个简单的生产者消费者问题的实现: ```c #include <stdio.h> #include <stdlib.h> #include <pthread.h> #define BUFFER_SIZE 10 int buffer[BUFFER_SIZE]; int count = 0; int in = 0; int out = 0; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t empty = PTHREAD_COND_INITIALIZER; pthread_cond_t full = PTHREAD_COND_INITIALIZER; void *producer(void *arg) { int i; for (i = 0; i < 20; i++) { pthread_mutex_lock(&mutex); while (count == BUFFER_SIZE) { pthread_cond_wait(&empty, &mutex); } buffer[in] = i; in = (in + 1) % BUFFER_SIZE; count++; printf("producer: produced %d\n", i); pthread_cond_signal(&full); pthread_mutex_unlock(&mutex); } pthread_exit(NULL); } void *consumer(void *arg) { int i, data; for (i = 0; i < 20; i++) { pthread_mutex_lock(&mutex); while (count == 0) { pthread_cond_wait(&full, &mutex); } data = buffer[out]; out = (out + 1) % BUFFER_SIZE; count--; printf("consumer: consumed %d\n", data); pthread_cond_signal(&empty); pthread_mutex_unlock(&mutex); } pthread_exit(NULL); } int main() { pthread_t tid1, tid2; pthread_create(&tid1, NULL, producer, NULL); pthread_create(&tid2, NULL, consumer, NULL); pthread_join(tid1, NULL); pthread_join(tid2, NULL); return 0; } ``` 在代码中,我们定义了一个大小为10的缓冲区,使用一个计数器count来记录缓冲区中产品的数量,in和out分别表示生产者和消费者在缓冲区中的位置。我们使用了两个条件变量empty和full来控制生产者消费者的同步。 在生产者中,当缓冲区已满时,生产者会等待empty条件变量,直到缓冲区有空位。当生产者生产完一个产品后,会唤醒消费者,并释放互斥锁。 在消费者中,当缓冲区为空时,消费者会等待full条件变量,直到缓冲区有产品。当消费者消费完一个产品后,会唤醒生产者,并释放互斥锁。 通过使用互斥锁和条件变量,我们可以保证生产者和消费者的正确同步,避免了竞争条件和死锁等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值