Interview
바이트댄스 Interview에서 물어본 것들 생각 나는 것 위주로 정리하고 그 밖에 많이 올라온 문제들 소개하기로 한다. 크게 컴퓨터 네트워크, 자료구조, 컴퓨터 시스템(OS) 지식을 물었고 코딩은 두 문제 나왔다. 온라인이어서 어떻게 하는지 궁금했는데 중국의 nowcoder라는 우리나라 programmers랑 비슷한 웹사이트를 통해서 진행되었다. 중간에 OJ사이트 처럼 코딩할 수 있는 에디터가 있고 우측에 카메라와 채팅창, 좌측에 문제설명 등이 있다.
Network
OSI 7层模型,TCP/IP五层模型。实际上TCP/IP五层模型是标准。它构成于:
- 应用层(application)
- 传输层(transport)
- 网络层(network)
- 数据链路层(link)
- 物理层(physical)
传输层协议为运行在不同的Host上的进程提供一种逻辑通信机制。
- 发送方:消息分成多个segment,传给网络层。复用-从socket接收数据,生成segment。TCP의 소켓은 4개 표식을 가진다. 소스 IP 주소, 소스 포트 넘버, 목적 IP 주소, 목적 포트 넘버.
- 接收方:将segment组装成消息,并交给应用层。分用-据segment交给正确的socket。즉 호스트는 IP Datagram을 수신하고, 그 Datagram안에 소스 IP 주소, 목적 IP 주소, Segment등이 합쳐져서 온 것을 부합하는 Socket에 보낸다. 처음 받은 정보들이 分되있으니까 分用
- 传输层的协议:TCP、UDP 网络层提供主机(Host)之间的逻辑通信机制,而传输层提供应用进程之间的。
TCP, UDP 差异
可靠、按序的交付服务(TCP)。拥有,拥塞控制、流量控制、连接建立。不可靠的交付服务(UDP)。UDP基于尽力而为(Best-effort)的网络层。两种服务均不保证:延迟、带宽
UDP: User Datagram Protocol
- 특징,
- Internet IP 프로토콜 기반: 复用/分用,简单的错误校验
- Best-effort服务,UDP段可能:丢失,非按序到达
- 无连接:UDP发送方和接收方之间不需要握手,segment独立地处理
- 常用于流媒体应用:容忍丢失,速率敏感 -用于DNS,SNMP
可靠数据传输
- 如何从错误中恢复:rdt2.0,ARQ protocol(Automatic Repeat reQuest)
ACK: Acknowledgements, 确认机制, 接收方显式地告知发送方分组已正确接收 NAK: 接收方显式地告知发送方分组有错误 发送方收到NAK后,重传分组
分组:Packet
- Pipeline protocol: 발신자가 ACK를 받기 전에 여러 패킷을 계속 보낼 수 있도록 허용. 발신자 및/또는 수신자는 패킷을 캐시하기 위해 더 많은 저장 공간이 필요하다.
- Sliding-window protocol: GBN, SR
- GBN: 接收方对每个Packet单独进行确认。发送方只重传那些没收到ACK的packet。为每个分组设置定时器。
TCP
特点,
- 点对点
- 可靠的、按序的
- 流水线机制
- 全双工(full-duplex):同一连接中能够传输双向数据流
- 面向连接
TCP的序列号和ACK
- 累计确认:该序列号之前的所有字节均已被正确接收到
TCP使用单一重传定时器。触发重传的事件——超时、收到重复ACK
三次握手
TCP 구현에서 타임아웃이 발생하면 타임아웃 간격이 재설정된다. 즉 타임아웃 간격이 2배가 되어 매우 크게 된다. 즉 손실된 패킷을 다시 보내기 전에 오랜 시간 기다린다. 반복 ACK로 패킷 손실 감지한다. 만약 패킷이 손실되었다면 여러 번 반복되는 ACK가 원인일 수 있다. 발신자가 동일한 데이터에 대해 3개의 ACK를 수신하면 데이터 이후의 세그먼트가 손실된 것으로 가정합니다.
- 빠른 재전송: 타이머가 만료되기 전에 재전송
Three way handshake:
- client host sends TCP SYN(동기화, TCP패킷의 일종. ) segment to server. specifies initial seq #. no data.
- Server host receives SYN, replies with SYNACK segment. server allocates buffers. specifies server initial seq. #.
- Client receives SYNACK, replies with ACK segment, which may contain data
视频聊天适合什么协议
TCP公平,但是多媒体应用通常不使用TCP,以免被拥塞控制机制限制速率。使用UDP:以恒定速率发送,能够容忍丢失。
公平性与并发TCP连接。某些应用会打开多个并发连接。Web浏览器。产生公平性问题。
- 例子:链路速率为R,已有9个连接。
- 新来的应用请求1个TCP,获得R/10的速率。
- 新来的应用请求11个TCP,获得R/2的速率
总结
It uses TCP for signaling, and both UDP and TCP for transporting “media traffic”. 그러나 UDP 비교적 적합하다.
TCP is a connection-oriented protocol, whereas UDP is a connectionless protocol. A key difference between TCP and UDP is speed, as TCP is comparatively slower than UDP. Overall, UDP is a much faster, simpler, and efficient protocol, however, retransmission of lost data packets is only possible with TCP.
UDP is fastest, doesn’t check if the packet is fully received. 참고