본문 바로가기

내일 배움 캠프/Weekly I learned

WIL 20230910

728x90

0. 기간 : 

2023.09.04 ~ 2023.09.10

1-1. 이번 주 동안 있었던 일

프로젝트 1차 완성

프로젝트 중간 발표

프로젝트 사용자 피드백 시작

1-2. 이번 주 체크리스트

[ O ] 예쁜 말로 협업하였는가?

[ O ] 12시간 동안 몰입하였는가?

[ O ] 코딩 시 복사 + 붙여넣기를 하지 않았는가?

[ ... ] 친절한 개발자였는가?

같이 개발하는 친구에게 모진 말을 하였다. 그 친구를 생각한 입장이었지만 말이 좀 심했던 것 같다. 

[ ? ] 이번 주를 평가하였을 때 주니어 개발자가 될 수 있겠는가?

 

2. 이번 주 소감

사용자 피드백 받는 것이 너무 즐거웠다.

에러는 쌓이고 할 일은 많아졌지만 내가 만든 커뮤니티를 누군가 이용해 준다는 것 자체가 기쁨이었다.

3. 이번 주에 배운 것

전송 제어 프로토콜(Transmission Control Protocol) = TCP/IP

웹 브라우저들이 WWW에서 서버에 연결할 때 사용되며, 이메일 전송이나 파일 전송에도 사용된다.

 

TCP 세그먼트 구조

TCP는 데이터 스트림으로부터 데이터를 받아 들여 이것을 청크 단위로 분할한 뒤 TCP 헤더를 덧붙여 TCP 세그먼트를 생성한다.

TCP 세그먼트는 IP 데이터그램 패킷화되어 상대방과 주고 받게 된다.

 

프로세스는 TCP를 통해 데이터 버퍼를 인수로 넘겨 줌으로써 데이터를 전송한다.

TCP는 이 버퍼들을 묶어 세그먼트를 생성하여 인터넷 모듈(IP 등)을 통해 목적지의 TCP로 각각의 세그먼트들을 전송한다

 

TCP 세그먼트는 세그먼트 헤더 데이터의 두 섹션으로 구성된다

TCP 헤더는 10개의 필수 필드 및 옵션 확장 필드(표 하단의 주황색 부분)들을 포함한다.

 

헤더 뒤에는 데이터 섹션이 따라 온다. 그 내용은 애플리케이션의 페이로드 데이터이다.

데이터 섹션의 길이는 TCP 세그먼트 헤더에서 결정되지 않으며,

전체 IP 데이터그램의 길이에서 TCP 헤더와 캡슐화된 IP 헤더의 길이를 뺀 값으로 계산하게 된다.

즉, 데이터 섹션의 길이는 IP 헤더에 의해 결정된다.

TCP 프로토콜의 작동

  1. 연결 생성 (Connection establishment)

SYN: 클라이언트가 서버에게 SYN 메시지를 보낸다. 이 메시지에 포함된 시퀀스 번호는 클라이언트가 임의로 설정한 값 A.

SYN-ACK: 서버가 클라이언트에게 SYN-ACK 메시지로 응답한다. 이 메시지에 포함된 시퀀스 번호는 서버가 임의로 설정한 값 B, 응답 번호는 (A + 1).

ACK: 클라이언트가 서버에게 ACK 메시지를 보낸다. 이 메시지에 포함된 응답 번호는 (B + 1).

3 way handshake

2. 자료 전송 (Data transfer)

3. 연결 종료 (Connection termination)

연결을 종료하기 위해, 4방향 핸드셰이크를 사용한다.

 

- TCP의 4-way Handshaking 과정

1. 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다. 이때 A클라이언트는  FIN-WAIT 상태가 된다.

2. B서버는 FIN플래그를 받고, 일단 확인메시지 ACK 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가

B서버의 CLOSE_WAIT상태다.

3. 연결을 종료할 준비가 되면, 연결해지를 위한 준비가 되었음을 알리기 위해  클라이언트에게 FIN플래그를 전송한다.

이때 B서버의 상태는 LAST-ACK이다.

4. 클라이언트는 해지준비가 되었다는 ACK를 확인했다는 메시지를 보낸다.

A클라이언트의 상태가 FIN-WAIT ->TIME-WAIT 으로 변경된다.

 

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

 

Client에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 있다면 이 패킷은 Drop되고 데이터는 유실될 것입니다. 

A클라이언트는 이러한 현상에 대비하여 Client는 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초) 동안 세션을 남겨놓고

잉여 패킷을 기다리는 과정을 거치게 되는데 이 과정을 "TIME_WAIT" 라고 합니다.

일정시간이 지나면, 세션을 만료하고 연결을 종료시키며, "CLOSE" 상태로 변화합니다. 

 

4. 배운 것들을 토대로 적용할 미래

개발이 즐거운 개발자

5. 다음주 목표

제출 자료 탄탄히 준비

브로셔 완성

피드백 반영 오류 수정

6. 나에게 응원 마디

잘 하고 있다 다 왔다

'내일 배움 캠프 > Weekly I learned' 카테고리의 다른 글

WIL 20230924  (0) 2023.09.24
WIL 20230917  (0) 2023.09.17
WIL 20230903  (0) 2023.09.03
WIL 20230827  (0) 2023.08.27
WIL 20230820  (0) 2023.08.20