Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자원부족
- 오블완
- kotlin
- vfr video
- python
- 코루틴 컨텍스트
- 달인막창
- JanusWebRTC
- 깡돼후
- preemption #
- PytestPluginManager
- addhooks
- 겨울 부산
- 코루틴 빌더
- table not found
- JanusWebRTCGateway
- 티스토리챌린지
- terminal
- Spring Batch
- PersistenceContext
- VARCHAR (1)
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- JanusGateway
- pytest
- mp4fpsmod
- JanusWebRTCServer
- Value too long for column
- tolerated
- 개성국밥
- taint
Archives
너와 나의 스토리
주소 할당 에러의 원인 - Time wait과 SO_REUSEADDR 옵션 본문
반응형
Time-wait의 이해
Four-way handshaking
- 호스트 A를 서버라고 하자, 서버가 호스트 B로 FIN 메시지를 먼저 보내고 있으니, 서버가 콘솔상에서 CTRL+C를 입력한 상황으로 볼 수 있다.
- 이 때, four-way handshaking이 끝나고 바로 소켓이 소멸되는 것이 아니라 일정시간(time-wait)을 거친다.
- 먼저 연결 종료를 요청한 호스트만 time wait 상태를 거친다.
- 소켓이 time-wait 상태에 있는 동안에는 해당 소켓의 PORT 번호가 사용중이므로 다른 소켓에 할당할 수 없다.
Time-wait의 존재 이유
- 호스트 A가 마지막 ACK을 전송하고 바로 소켓을 소멸시켰는데, 그 ACK이 소멸된다면?
- 호스트 B는 호스트 A가 자신의 FIN을 못 받은지 알고 계속 FIN을 보내지만, 호스트 A는 이미 소멸되었기 때문에 영원히 ACK을 보낼 수 없게된다.
- 이러한 이유로 Time-wait 과정을 거치는 것이다.
- 호스트 A가 FIN을 다시 받으면 다시 ACK을 보낼 수 있도록 기다리는 시간이라고 생각하면 된다.
Time-wait은 길어질 수 있다.
- 호스트 A가 FIN을 다시 받고 ACK을 보내면 Time-wait 타이머는 다시 시작한다. 즉, 네트워크 상황이 원할하지 않는다면 time-wait 상태는 길게 지속될 수 있다.
Time-wait이 길어지는 상황 해결
- 소켓의 옵션 중에서 SO_REUSEADDR의 상태를 변경하면 된다.
- 이의 적절한 변경을 통해서 Time-wait 상태에 있는 소켓에 할당되어 있는 PORT번호를 새로 시작하는 소켓에 할당되게끔 할 수 있다.
- SO_REUSEADDR의 디폴트 값은 0(FALSE)로 Time-wait 상태에 있는 소켓의 포트 번호는 할당이 불가능함을 의미
출처: [윤성우 열혈 TCP/IP 소켓 프로그래밍]
반응형
'Computer Networks > 실습' 카테고리의 다른 글
[TCP/IP 소켓] Signal 함수, 핸들링, 좀비 프로세스 소멸, 다중접속 서버 (0) | 2019.11.08 |
---|---|
[CH.4-2,3] TCP기반 서버, 클리이언트의 구현 - Iterative 기반으로 구현 (0) | 2019.10.09 |
[CH.4-1] TCP와 UDP에 대한 이해 (0) | 2019.10.09 |
[실습] 주소체계와 데이터 정렬 - IP주소/PORT번호/주소정보 표현/인터넷 주소(Internet Address) (0) | 2019.09.25 |
리눅스 기반 파일 조작하기 (0) | 2019.09.25 |
Comments