rkskekzzz / frontend-interview-study

0 stars 0 forks source link

TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)에 대해 설명해주세요 #6

Open rkskekzzz opened 1 year ago

rkskekzzz commented 1 year ago

참고자료

rkskekzzz commented 1 year ago

1.TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)에 대해 설명해주세요

OSI 7계층 중, 두 프로토콜 모두 전송계층의 포로토콜입니다. TCP는 데이터가 반드시 전달되는 것을 보장하는 프로토콜 입니다. TCP의 특징으로는 연결지향, 높은 신뢰성, 전 이중 방식 등이 있습니다. HTTP, FTP(파일전송), SMTP(메일전송) 등에서 사용됩니다.

  1. OSI 7계층에는 어떤 것들이 있나요?

    application, presentation, session, transport, network, datalink, physical이 있습니다.

  2. 3WHS에 대해 설명해주세요

    TCP가 호스트간 연결을 설정하는 방법입니다. SYN(synchronize sequence numbers), ACK(acknowledgment) 패킷을 사용하여 상호간의 상태를 판단합니다. 우선 요청을 보내는 Client측이 SYN을 보내 커넥션을 요청합니다. 그럼 요청을 기다리고 있던 Server측에서는 받은 SYN에 1을 더한 값을 ACK 패킷에, 새로운 랜덤 값을 SYN패킷에 담아서 응답을 보냅니다.마지막으로 Client가 Server측으로 받은 SYN + 1 값을 ACK패킷에 담아 보내면 이제 데이터를 전송할 준비가 완료됩니다.

Q. TCP의 연결 설정 과정(3단계)과 연결 종료 과정(4단계)이 단계가 차이나는 이유?

Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아있을 수 있기 때문에 일단 FIN에 대한 ACK만 보내고, 데이터를 모두 전송한 후에 자신도 FIN 메시지를 보내기 때문이다. 관련 Reference

Q. 만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?

이러한 현상에 대비하여 Client는 Server로부터 FIN 플래그를 수신하더라도 일정시간(Default: 240sec)동안 세션을 남겨 놓고 잉여 패킷을 기다리는 과정을 거친다. (TIME_WAIT 과정) 관련 Reference

Q. 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유?

Connection을 맺을 때 사용하는 포트(Port)는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용된다. 따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재한다. 서버 측에서는 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순처적인 Number가 전송된다면 이전의 Connection으로부터 오는 패킷으로 인식할 수 있다. 이런 문제가 발생할 가능성을 줄이기 위해서 난수로 ISN을 설정한다. 관련 Reference